2011-12-17 17 views
0

構造体をmain.hに持っていますが、構造体の3D配列のメモリを割り当てようとすると次のコンパイラエラーが発生します。私の.hファイルで定義されている構造体の3D配列にアクセスできない

'text' has no member named 'list' 

ここで私は3D配列に対して、構造体内の他の変数のみを取得します。

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 

    } 

} 
+1

コンパイルエラーを含めてください – DipSwitch

+0

nvmはそれを見て – DipSwitch

+2

あなたはコンパイルエラーだけを述べましたが、あなたが受け取った正確なエラーは言及していませんでした。あなたはそれに言及する必要があります。 – Lion

答えて

0

私はコメントで言ったように。問題

それは私が誤って間違ったmain.hファイルを開いていた私の自己、ことの愚かな間違いだったので、私は他のプロジェクトのファイルを編集したので、私が使用していた構造体がした固定

実際にはメンバーリストを持っていません。

私を助けてくれてありがとう。

0
  1. checkTextsは初期化することができ - あなたは、実行中にポインタを表示するdddを試してみてくださいassert.h
  2. からassert()でこれを扱うことができます。これは、何がうまくいかないかを見るための最良の方法の1つです。

多分これはあまりにも助けることができる: http://c-faq.com/aryptr/ 特に6.2、6.3、6.8を。

+0

お待ちください。あなたの情報はどこから手に入りますか?私はmalloc戻り値の過剰なキャストの原因を追跡しようとしていますが、このサイトの宿題に関する質問では横行しており、通常は問題の原因です。 –

+0

タイプキャストによる問題はどれですか?キャストすることで、タイプミスマッチが報告されるため、エラーをより簡単に追跡できます。問題が発生した場合は、割り当てを再確認する必要があります。 – fuzzy

+0

これは、stdlib.hをインクルードするのを忘れた場合、mallocがvoid *の代わりにintを返すことを意味します。これは、sizeof(int)!= sizeof(void *)の問題を引き起こします。キャストはコンパイラに警告します。 –

関連する問題