Не могу получить доступ к трехмерному массиву в структуре, определенной в моем .h файле - PullRequest
0 голосов
/ 17 декабря 2011

У меня есть структура в моем main.h, но когда я пытаюсь выделить память для трехмерного массива в структуре, я получаю следующую ошибку компилятора.

    'text' has no member named 'list'

Теперь я получаю это только для трехмерного массива, остальные переменные в структуре.

main.h

#define MAX_WORD 100

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

main.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "main.h"

void createArray(FILE *file, text *checkTexts, int fileCount,  int size){
   int i, n, wordCount, sections, rest;
   FILE *textFile;
   text localText;
   char fileName[MAX_WORD + 30];

   readFileNames(file, checkTexts);

   for(i = 0; i < fileCount; i++){
      localText = checkTexts[i];

      strcpy(fileName, "./testFolder/");
      strcat(fileName, checkTexts[i].name);
      openFile(&textFile, fileName);

      checkTexts[i].words = countWords(textFile);

      sections = (wordCount / size);
      rest = wordCount % size;
      checkTexts[i].list = malloc(sections * sizeof(char **)); //Compile error here

      for(n = 0; n < sections; n++){
         checkTexts[i].list[n] = malloc(size * sizeof(char *)); //Compile error here
      }

      checkTexts[i].list[sections] = malloc(rest * sizeof(char*)); //Compile error here

      readFileContent(textFile,checkTexts[i].list, size); //Compile error here

   }

}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

Как я уже говорил в комментарии.

Исправлена ​​проблема

Это была глупая ошибка, если я был собой, когда я случайно открыл неправильный файл main.h, поэтому я редактировалфайл для другого проекта, так что структура, которую я использовал, действительно не имела списка участников.

Но спасибо за попытку помочь мне.

0 голосов
/ 19 декабря 2011
  1. checkTexts может быть неинициализировано - вы можете обработать это с помощью assert() из assert.h
  2. Попробуйте ddd , чтобы просмотреть ваши указатели во время выполнения.Это один из лучших способов увидеть, что происходит не так.

Может быть, это тоже может помочь: http://c -faq.com / aryptr / Особенно 6.2, 6.3, 6.8.

...