• 締切済み

ポインタ

#include<stdio.h> #include<stdlib.h> struct number{ int value; struct number *next; }; int main(void){ FILE *f; struct number *p; int n=0,i; f=fopen("number.txt","r"); p=malloc(sizeof(struct number)); if(p==NULL){ printf("error"); return 1; } while(fscanf(f,"%d",&(p+n)->value)!=EOF){ (p+n)->next=malloc(sizeof(struct number)); if(p+n==NULL){ printf("error"); return 1; } p+n=(p+n)->next; n++; } for(i=0;i<n;i++) printf("%d\n",(p+i)->value); free(p); fclose(f); return 0; } のp+n=(p+n)->next;の部分でバグが出てしまうのですがアロー演算子と通常の演算子を同時に使うことができないなどのような規則があるのでしょうか、それとも俺がバカなだけなのでしょうか?ご指摘お願いします。

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

そもそもnは何のための変数なのですか?

回答No.1

>p+n=(p+n)->next 左辺で計算式を使用することはできません。 処理系によっては (p+n)=(p+n)->next は許可されている場合がありますが。 尚、free()の使用方法が間違っています。 このプログラムでは、mallocで取得したメモリは一番最初以外残ったままです。 「リスト構造」を理解してますか?

関連するQ&A