2012-01-27 7 views
0

ファイルからデータをリストに読み込みます。リンクされたリスト-1ノードを前面に追加

私は私が読んで、リストの先頭に追加する。

挿入が動作しているようですが、私の印刷機能は、-1のリターンが発生します。 これは私のコードです:

#include <stdio.h> 
#include <stdlib.h> 

これが私のリストである

typedef struct node{ 
int x,y,v; 
struct node* next; 
}node; 

これは私のインサートである:

node* insert(node* L, int x, int y, int v){ 
node* new= (node*)malloc(sizeof(node*)); 
new->x = x; 
new->y = y; 
new->v = v; 
new->next=NULL; 
if(L==NULL){ 
    L=new; 
} 
else{ 
new->next=L; 
L=new; 
} 
return L; 
} 

問題はここにあると思われる:

void printList(node* L){ 
node* c=NULL; 
c=L; 
while(c != NULL){ 
printf("x=%d, y=%d, v=%d\n", c->x, c->y, c->v); 
c=c->next; 
} 
} 

メイン:

int main(int argc, char* argv[]){ 
FILE* in; 
int h, w; 
int x, y, v; 
in = fopen(argv[1], "r"); 
if(in == NULL) 
    { 
      puts ("cannot open file") ; 
      exit(0) ; 
    } 
fscanf (in, "%d,%d\n", &h, &w); 
printf("%d,%d\n", h, w); 
node* L=NULL; 
while(!feof (in)){ 
    fscanf (in, "%d,%d,%d\n", &x, &y, &v); 
    L=insert(L, x, y, v); 
    //printf("x=%d, y=%d, v=%d\n", L->x, L->y, L->v); 
    //printf("%d,%d,%d\n", x, y, v); 
} 

printList(L); 
return 0; 
} 

どうしたのですか?

答えて

4
node* new= (node*)malloc(sizeof(node*)); 

あなたはnode(32ビットマシン上の4バイト)へのポインタのサイズを割り当てますが、何が欲しいのノード(16バイト、またはsizeof(node))ですしています。

また、Cが気にしなくても、私は変数名としてnewを避けると言っています。それは多くの言語のキーワードです

+0

+1の 'new'キーワード – ouah

2

コードをトレースすることなく、が大きく表示されます。の問題です。ノードのサイズが間違っています。それはsizeof(node)でなく、sizeof(node*)でなければなりません(またはsizeof(*new)を使用できます)。

あなたがそれを修正するまで、残りの部分を処理する価値はありません。メモリを壊すことになります。

+0

私はそこに問題があったと推測していないでしょう。ありがとうございました! –

関連する問題