私は現在、C プログラミングのコースのプロジェクトに取り組んでおり、問題が発生しました。私はまだ C 言語に慣れていませんが、Java のプログラミング経験はあります。
structのchar *変数メンバーに値を割り当てようとすると、プログラムで問題が発生します。問題のコードは以下のとおりです。
void ReadFile(ComponentType * Data, int * numEl, int * numNodes)
{
size_t index;
FILE * dataFile;
char * data;
float * value;
numEl = malloc(sizeof(int *));
numNodes = malloc(sizeof(int*));
Data = malloc(6 * sizeof(ComponentType));
* numEl = 0;
* numNodes = 0;
index = 0;
if((dataFile = fopen("mydata.dat", "r")) == NULL)
puts("Error - file \"mydata.dat\" could not be opened!");
else
{
while(!feof(dataFile))
{
fscanf(dataFile, "%s", data);
Data[index].name = (char *)malloc(strlen(data)+1);
strcpy(Data[index].name, data);
fscanf(dataFile, "%s", data);
Data[index].node1 = (char *)malloc(strlen(data)+1);
strcpy(Data[index].node1, data);
fscanf(dataFile, "%s", data);
Data[index].node2 = (char *)malloc(strlen(data)+1);
strcpy(Data[index].node2, data);
fscanf(dataFile, "%f", value);
Data[index].value = * value;
int i = char2int(CircuitData[index].node1);
if(i > * numNodes)
* numNodes = i;
i = char2int(CircuitData[index].node2);
if(i > * numNodes)
* numNodes = i;
(* numEl)++;
(* numNodes)++;
index++;
}
fclose(dataFile);
}
free(Data);
free(numEl);
free(numNodes);
}
構造は次のように定義されます。
typedef struct
{
char * name;
char * node1;
char * node2;
float value;
} ComponentType;
プログラムでデバッグを実行しましたが、基本的にファイルが正しく読み取られ、データに格納されている値が正しいことですが、 Data[index].nameを出力すると、 char *としてフォーマットされている場合にセグメンテーション違反が発生するか、デバッグ プログラムは 0x0 を出力します。要するに、ファイルから読み取られた値は、必要な構造変数にコピーされていません。
任意の提案/ヘルプをいただければ幸いです。ありがとうございました。
編集:Linux 64ビットを使用してコーディングしています
編集2:以下に提案された変更でエラーが発生する関数全体を追加しました