0

私はCでプログラムを書いているので(LinuxではEclipse)、大きなテキストファイルを開いてそれを読む必要があります(そして毎回異なるサイズのバッファーで試してみてください)

とにかく、これはコードであり、Imがopen関数からセグメンテーション違反を取得する理由がわかりません

int main(void)
{
    int fd;
    char* buff[67108864];
    FILE *testfile;
    double dif;
    fd = open("testfile.txt", O_RDONLY);
    if (fd>=0) {
        read(fd,buff,67108864);
        close(fd);      }

    return 0;
}

質問を編集しましたが、バッファを必要な最大サイズ(67108864バイト)に変更しても、セグメンテーション違反が発生します...

4

3 に答える 3

4
char buff;

ポインタである必要があります

char *buff;

また、読んread(fd,buff,(sizeof(char)));だ後、reallocでバフするためにより多くのメモリを割り当てる必要があります。

于 2013-03-25T14:54:21.027 に答える
2

バフにメモリを割り当てたい場合は、それをポインタにする必要があります。

char* buff;

また、1文字しか割り当てないことに注意してください。それを考慮する必要があります。より多くのメモリを使用したいと思います。

もう1つの一般的なことは、ファイルの読み取りにダイナミックメモリを使用しないことです。

試す:

char buff[100]; 

そして、同じコード...

read(fd,buff,100));

そして、検索が完了するまで読み取りを続けると、readは実際に読み取られたバイト数を返します。

また、上記のコメントのように、初期化する前にテストファイルを使用しています。これもアクセス違反です。

于 2013-03-25T14:54:16.697 に答える
0

変化する

char* buff[67108864]

char buff[67108864]

必要なのはchar配列であり、charポイント配列ではありません。

于 2013-03-25T17:49:22.047 に答える