2011-12-16 3 views
1

Как вопрос предыдущего вопроса, у меня возникли проблемы с распределением памяти на 3-мерный массив.Выделение памяти на 3-мерный массив символов вызывает ошибку сегментации

Я работаю над проектом, где нам нужно выполнить некоторую работу над текстом. Для этого нам нужно разбить текст на более мелкие разделы и обработать текст слово в слово. Чтобы сохранить эти меньшие фрагменты текста, у нас есть 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

Ну, я очень благодарю вас, лень действительно укореняет все зло;) –

Смежные вопросы