2011-12-16 13 views
1

これまでの質問のスピンとして、私は3次元配列にメモリを割り当てるといういくつかの問題にぶつかってきました。3次元のchar配列にメモリを割り当てると、セグメンテーションフォルトが発生する

私はテキストを使って作業する必要があるプロジェクトに取り組んでいます。これを行うには、テキストをより小さなセクションに分割し、単語のテキストワードを処理する必要があります。これらの小さなテキストを保存するには、セクション内の単語のリストを含むセクションのリストである3D配列があります。

しかし、malloc()を使用して個々の単語のメモリを割り当てようとすると、セグメント化エラーが発生します。

localText->list[i][n] = malloc(100 * sizeof(char)); 

ここにコード全体があります。

typedef struct { 
    char name[100]; 
    char ***list; 
}text; 

int main(){ 
    int i = 0, n, z,wordCount, sections; 
    FILE *file; 
    text *localText; 

    openFile(&file, "test.txt"); 
    wordCount = countWords(file); 

    sections = (wordCount/50) + 1; 

    localText = malloc(sizeof(text)); 
    localText->list = malloc(sections * sizeof(char **)); 

    for(i = 0; i < sections; i++) 
     localText->list[i] = malloc(50 * sizeof(char *)); 
     for(n = 0; n < 50; n++) 
     localText->list[i][n] = malloc(100 * sizeof(char)); 

    readFileContent(file, localText->list, 50); 

    freeText(localText); 

    return 1; 
} 
+3

W/Oは、唯一の文は、ループ本体に属しブレース。括弧を外してはいけません! :-) – ckruse

答えて

6

あなたは、いくつかの括弧が欠落している:

for(i = 0; i < sections; i++) { 
// ... 
} 
+2

(+1)よく目撃された! – NPE

+3

構造体が常に1行であっても、常に構造体を補強するもう一つの理由があります。 –

+0

まあ、本当にありがとう、怠惰は本当にすべての悪に根ざしている;) –

関連する問題