0

我已经问过一个类似的问题,但我认为现在问题不同了。我在 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;
}
4

2 回答 2

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);
}
于 2013-03-25T15:34:12.893 回答
4

Remove *,您正在声明一个指针数组,但您需要一个字符数组。

   char buff[67108864];

我不确定67108864它对于堆栈来说太大了。尝试在堆上进行。

于 2013-03-25T15:33:11.867 回答