我已经问了一个类似的问题,但我认为现在问题不同了...... 我在eclipse,linux机器上用C语言写作。
我需要读取测试文件,每次尝试使用不同的缓冲区大小... 我知道如果缓冲区的大小太小,我需要多次在缓冲区上运行,但我不知道怎么做...
这是我的代码(当我在缓冲区上运行时,大小为67108864即时分区错误。 *我编辑了我的代码
int main(void)
{ int fd;
char* buff = malloc (67108864);
if (buff){
fd = open("testfile.txt", O_RDONLY);
if (fd >= 0) {
while (read(fd,buff,67108864)!=0){}
close(fd);
}
}
free(buff);
return 0;
}
答案 0 :(得分:5)
这不是char[]
:
char* buff[67108864];
但是是char*
的数组。改为:
char buff[67108864];
此外,buff
的大小可能对于堆栈而言太大。堆栈的典型大小为1MB(1048576字节),但buff
的大小远远超过(64MB!),这将导致堆栈溢出错误。如果您希望使用此缓冲区,请使用malloc()
动态分配,然后使用free()
稍后发布:
char* buff = malloc(67108864);
if (buff)
{
/* Use 'buff' and then release it. */
free(buff);
}
答案 1 :(得分:4)
删除*
,你声明了一个指针数组,但你需要一个字符数组。
char buff[67108864];
我不确定67108864
它对于堆栈来说太大了。尝试在堆上制作它。