[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: random_r functies



On 11/22/2011 10:47 PM, Eric Meijer wrote:
Hoi allemaal,

Ik heb een progammeer-probleem en ik weet niet of het een bug is of ik iets over het over het hoofd zie. Voor een multi-threaded programma (in C++) wil ik een random number generator gebruiken. Hiervoor zijn de re-entrant versies van de random en initstate nodig. Deze probeer ik nu uit met een simpel C programmaatje:

---- testrand.c ----
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
  struct random_data state1;
  const size_t bufsz = 256;
  char buf1[bufsz];
  int32_t r1;

  fprintf(stderr, "%d\n", initstate_r(1u, buf1, bufsz, &state1));
  random_r(&state1, &r1);
  fprintf(stderr, "%d\n", r1);

  return 0;
}
----

Hoi,

Zelf het antwoord gevonden hier: http://www.gammon.com.au/forum/?id=11209&page=999
Het blijkt dat je de struct random_data eerst op 0 moet initialiseren met
memset(&state1, 0, sizeof(state1));
of zo. Het lijkt me een bug in de initstate_r implementatie, en het staat ook niet manual page.
Misschien dien ik er nog wel een bug over in.
Bedankt voor het meedenken.

Eric


Reply to: