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

を削除*します。ポインタの配列を宣言していますが、文字の配列が必要です。

   char buff[67108864];

67108864スタックするには大きすぎるかどうかはわかりません。ヒープ上で作成してみてください。

于 2013-03-25T15:33:11.867 に答える