2013-12-14 2 views
1

Пытается динамически распределять данные из файла csv. Я пытаюсь создать массив структур, содержащих 2d-массивы. Проблема в том, что я получаю нарушение прав доступа при попытке выделить память для массива внутри структуры. Отмечена проблемная область с комментарием. Любая помощь приветствуется.Динамически выделять массив в struct - c

typedef struct current{ 

    char **data; 

}*CurrentData; 

CurrentData getData(FILE *current){ 

CurrentData *AllCurrentData = malloc(NUM_ITEMS * sizeof(CurrentData)); 

    /*allocate struct data memory, skipping the first line of data*/ 
    while ((ch = fgetc(current)) != EOF){ 
     if (firstNewLine == 0){ 
      firstNewLine++; 
     } 
     if (firstNewLine > 0){ 
      if (ch == '\n'){ 
       AllCurrentData[newLineCount]->data = malloc(COLUMNS * sizeof(char)); //problem here// 
       newLineCount++; 
      } 
     } 
    } 
} 
+1

Где инициализируется newLineCount до 0? – OldProgrammer

+1

@OldProgrammer Нет главного, поэтому я думаю, что он просто отобразил «важный» код. – Radnyx

ответ

0

Это следующая строка:

CurrentData *AllCurrentData = malloc(NUM_ITEMS * sizeof(CurrentData)); 

должно быть:

CurrentData AllCurrentData = malloc(NUM_ITEMS * sizeof(*CurrentData)); 

Также замените это:

AllCurrentData[newLineCount]->data 

с этим:

AllCurrentData[newLineCount].data 

Причина: Ваш есть typedef ред CurrentData быть указателем на struct current, и вы можете сразу выделить AllCurrentData как массив struct current.

+0

Спасибо, проблема решена, указатели все еще путают меня. – TinMan

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