I am trying to generate uint_32 random numbers which should be stored in the buffer array, but somehow, my codes only stores last value every time.
For instance, when I generate random numbers like
12365645
97897875
45458788
then the value of
buffer[0]=12365645
buffer[1]=97897875
buffer[2]=45458788
However currently, I am getting like
buffer[0]=45458788
buffer[1]=45458788
buffer[2]=45458788
Here is my corresponding code but ain't sure where I have made a mistake.
/*Required header files are added*/
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdint.h>
struct thread_arguments
{
char *buffer;
char *queue[10];
uint32_t offset;
uint32_t r;
size_t bufferlen;
size_t minlevel;
}ta;
void randomgenerate();
void constructor(int size, int filllevel);
void put_buffer(int ele);
void printbuf();
int main(void)
{
ta.offset=0;
ta.buffer=NULL;
constructor(1,3);
randomgenerate();
printbuf();
return EXIT_SUCCESS;
}
void constructor( int filllevel,int size)
{
//ta.buffer[size];
ta.bufferlen=size;
ta.minlevel=filllevel;
}
void randomgenerate()
{
int i;
for(i=0;i<ta.bufferlen;i++)
{
int myFile = open("/dev/random", O_RDONLY);
read(myFile, &ta.r, sizeof(ta.r)) ;
put_buffer(i);
close(myFile);
}
}
void put_buffer(int ele)
{
ta.buffer = realloc(ta.buffer, sizeof(uint32_t));
sprintf(ta.buffer, "%zu", ta.r);
ta.offset += sizeof(uint32_t);
ta.queue[ele]=ta.buffer;
printf("%d\t%s\n",ele,ta.queue[ele]);
}
void printbuf()
{
int k;
for(k=0;k<ta.bufferlen;k++)
{
printf("%s\n",ta.queue[k]);
}
}
bufferpoint to the same storage location.realloc()and consider whether a different function might be better suited for what you want.ta.queue[ele]using simplemalloc().mallocit during your "constructor" and then just memset to zero? You're currently not "reallocating" anything, you're just resizing the buffer to the size it is currently.