2017-11-01 11 views
0

私はCSクラスの課題を次のように記述していますが、動的にメモリを割り当てることができません。私のコードを今日提出する必要があります。ファイルストリームに動的にメモリを割り当てる方法は?

次のように私は、構造:

typedef struct sample{ 
char* name; 
int list_len; 
float* value_list; 
}sample; 

私はファイルの読み取り中にメモリを動的に割り当てる必要があります。

区切られたサンプルデータレコードのファイル(テキストエディタ-picoで作成)を、サンプル構造体へのポインタの配列に読み込みます。注:1024の静的サイズの配列を使用できますが、配列の各要素は(上記で定義した)サンプル構造体へのポインタでなければなりません。最初は、配列の各要素をNULL(使用されていないことを示す)に設定し、後で使用する場合は動的に割り当てられたサンプル構造体に設定する必要があります。

注:サンプル構造体に動的にメモリを割り当てた後、構造体の各コンポーネントごとに十分なメモリがあります。しかし、ポインタであるその構造体の各コンポーネントについては、最終的にそれが指し示す「物」のためにメモリを割り当てる必要があります(char *、float *経由の配列)。また、サンプル構造体へのポインタを介してメモリを解放するときに、これを覚えておく必要があります。

私はこれまでこれを持っており、strtokを使用してリストを解析しようとしています。

void readfile(){ 
    int SIZE = 1024; 
    sample* arr[SIZE] = {NULL}; 
    FILE* fin; 
    sample* sample;  
    fin = fopen("sample.txt", "r"); 
    if (fin == NULL) { 
     printf("sample.txt could not be opened"\n"); 
     exit(1); 
    } 
    else 
     fgets(arr, SIZE, fin); 
     while(fin != EOF){ 
      sample = (sample*)malloc(sizeof(sample); 
     } 


} 
+1

'(= EOFフィン!)' "私はstrtokはを使用しようとしています" –

+0

完全に間違っている間に - >これは不明です。コードには 'strtok()'はありません。 'strtok()'コードを投稿してください。 – chux

+0

'else fgets(arr、SIZE、fin); while(fin!= EOF){... ' - >' else {while(fgets(arr、SIZE、fin)){... ' – chux

答えて

0

はちょうどあなたのメモリの問題に集中し、あなたのコード内の他のすべてのエラーを無視:

sample* arr[SIZE] = {NULL}; 

ですから、sample sのポアントの配列を持っています。 sampleは変数ではないので、次の文は、しかし、あなたが近くにあり、コンパイルされません。

sample = (sample*)malloc(sizeof(sample); 

必要なのは、配列のどこにいるかを追跡するためのラインと、変数を読み込むためのバッファです。

 int i= 0; 
    char linebuf[1024]; 
    while (fgets(linebuf, 1024, fin) && i<SIZE) { 
     arr[i]= malloc(sizeof(sample)); 
     // now parse the linebuf and fill arr[i] with it 
     i++; 
    } 
+0

答えに感謝します。申し訳ありませんが、私のコードがひどい読書であれば、私はちょうどC言語を学び始めています。 – Ronaldo7

関連する問題