В realloc
памяти, в которой fileInfoArray
указывает на enlargeFileInfos
, вы должны передать его адрес функции:
void enlargeFileInfos(fileInfo **fileInfoArray, int currentSize)
{
fileInfo *temp = realloc(*fileInfoArray, (currentSize + 1) * sizeof(fileInfo));
if (temp == NULL) {
printf("realloc --FAILED--\n");
return;
}
*fileInfoArray = temp;
printf("fileInfo grew to %d item(s)\n", currentSize + 1);
}
Затем вы вызываете функцию следующим образом:
enlargeFileInfos(&fileInfoArr, nrOfDirs);
Как указал Джонатан Леффлер в комментариях, альтернативный способ - вернуть realloc
ed память из функции enlargeFileInfos
:
fileInfo *enlargeFileInfos(fileInfo *fileInfoArray, int currentSize)
{
fileInfo *temp = realloc(fileInfoArray, (currentSize + 1) * sizeof(fileInfo));
if (temp == NULL) {
printf("realloc --FAILED--\n");
return NULL;
}
printf("fileInfo grew to %d item(s)\n", currentSize + 1);
return temp;
}
И затем, вы используете это следующим образом:
fileInfoArr = enlargeFileInfos(fileInfoArr, nrOfDirs);
if (fileInfoArr == NULL) {
/* Handle allocation failure */
}
И после того, как вы закончите работать с fileInfoArr
, не забудьте освободить его:
free(fileInfoArr);
Я удалил приведение из realloc
, поэтому взгляните на Должен ли я привести приведение к результату malloc? и измените сигнатуру main
на int main(void)
.