Linked List -1将节点添加到前面

时间:2012-01-27 19:22:26

标签: c list pointers

我从文件存储中读取数据到列表中;

我想在读到时添加到列表的前面。

插入似乎有效,但我的print函数导致-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;
}

出了什么问题,拜托?

2 个答案:

答案 0 :(得分:4)

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

您正在为指向node(32位计算机上的4个字节)的指针分配大小,但您想要的是一个节点(16个字节,或sizeof(node))。

另外,我会说,即使C不关心,我也会避免使用new作为变量名。它是许多语言的关键字,

答案 1 :(得分:2)

如果没有跟踪代码,我会看到一个问题。您的malloc()节点的大小错误。它应该是sizeof(node)而不是sizeof(node*)(或者您可以使用sizeof(*new))。

在你解决这个问题之前,不值得经历剩下的事情,因为你将会破坏记忆。