我从文件存储中读取数据到列表中;
我想在读到时添加到列表的前面。
插入似乎有效,但我的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;
}
出了什么问题,拜托?
答案 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)
)。
在你解决这个问题之前,不值得经历剩下的事情,因为你将会破坏记忆。