I am trying to read some input using fgets() but I need to store the input in a dynamic array called userNumbers, how am I supposed to get realloc() to work with fgets()? My program breaks when i try to read more than 8 elements(i.e. 1,2,3,4,5,6,7,8 works but 1,2,3,4,5,6,7,8,9,10 does not). Another thing is that I MUST use fgets(). Thanks in advance.
size_t capacity = 4;
size_t size = 0;
char* userNumbers = (char*)malloc(capacity * sizeof(char));
char** realNumStr = (char**)malloc(capacity * sizeof(char*));
double* realNumDouble = (double*)malloc(capacity * sizeof(double));
double* realNumDoubleFinal = (double*)malloc(capacity * sizeof(double));
double* realNumDoubleMedian = (double*)malloc(capacity * sizeof(double));
if (userNumbers == NULL || realNumDouble == NULL || realNumDoubleFinal == NULL || realNumStr == NULL)
{
printf("insufficient Memory");
return EXIT_FAILURE;
}
//User's input
while (fgets(userNumbers, capacity, stream))
{
size += strlen(userNumbers);
while (size >= capacity)
{
capacity = size * 2;
char* userNumbers2 = realloc(userNumbers, capacity * sizeof(char)+1);
char** realNumStr2 = realloc(realNumStr, capacity * sizeof(char*)+1);
double* realNumDouble2 = realloc(realNumDouble, capacity * sizeof(double));
double* realNumDoubleFinal2 = realloc(realNumDoubleFinal, capacity * sizeof(double));
if (userNumbers2 == NULL || realNumDouble2 == NULL || realNumDoubleFinal2 == NULL || realNumStr2 == NULL)
{
free(userNumbers);
free(realNumDouble);
free(realNumDoubleFinal);
free(realNumStr);
printf("insufficient Memory");
return EXIT_FAILURE;
}
userNumbers = userNumbers2;
realNumStr = realNumStr2;
realNumDouble = realNumDouble2;
realNumDoubleFinal = realNumDoubleFinal2;
}
//...Code continues... }
//Error thrown: HEAP[rstats.exe]: Invalid address specified to RtlValidateHeap( 0000026E15F20000, 0000026E15F298F0 ) stat.exe has triggered a breakpoint.
breakpoint triggered here: if (!has_cctor) _cexit();