gpt4 book ai didi

c - C 中动态内存分配时遇到错误

转载 作者:行者123 更新时间:2023-11-30 18:51:50 27 4
gpt4 key购买 nike

在下面的代码中,line[]数组包含文件夹中包含的所有图像文件的名称。我们只是动态读取名称并将文件名一一发送到函数 function_foo如代码中所示。当有 8 个图像时,代码将按预期执行。但是,一旦我们将文件夹中的图像文件数量增加到 8 以上的任意数量,该进程就会终止并返回 -1。请提出建议。

FILE **fp;
struct Structure_Name data[100];
fp = malloc( sizeof(FILE *) * 10000);

for(i=0;i<total; i++)
{
sprintf(fName,"/home/souvik/Images/%s",line[i]);
printf("%s\n",fName);
fp[i] = fopen(fName, "rb");
data[i]=function_foo(fp[i],(data[i]));
}

最佳答案

同时打开 10000 个文件是一个非常糟糕的主意。我建议你改变这个逻辑:一一读取这些文件的内容,并将这些内容发送到你的函数function_foo。但目前您的代码尝试fopen非常大量的文件而不关闭它。我预计这是主要问题(即,在您的环境中,可以打开的最大文件数似乎是 8)。

另请参阅:

更新:

由于您不需要所有指针的数组,因此您可以尝试以下版本。您在本例中看到同样的问题吗?

FILE *fp;
struct Structure_Name data[100];

for(i=0; i<total; i++)
{
sprintf(fName,"/home/souvik/Images/%s", line[i]);
printf("%d of %d, %s\n", i, total, fName);
fp = fopen(fName, "rb");
if (fp != NULL)
{
data[i]=function_foo(fp,(data[i]));
fclose(fp);
} else
{
printf("A null pointer is returned by fopen()");
}
}

关于c - C 中动态内存分配时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35886663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com