【发布时间】:2017-04-22 10:38:23
【问题描述】:
我编写了一个链表程序,它将数据成员存储为 void *。 在尝试使用 scanf/printf 函数存储和打印时,我遇到了分段错误。
节点定义 -->
typedef struct node {
struct node *next;
void *data;
}node;
主要功能 -->
head=(node *)malloc(sizeof(node));
if (head==NULL){
printf("error in allocation of memory\n");
exit(EXIT_FAILURE);
}
tail=(node*)create(head);
创建函数 -->
void *create(node *current)
{
int user_choice;
while(current){
printf("\nEnter the data:");
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
current=current->next;
}
else{
current->next=NULL;
}
}
return current;
}
谁能说出 scanf 和 prinf 的正确参数应该是什么?
合并答案中给出的点后的工作代码...
void *create(node *current)
{
node *temp;
int user_choice;
while(current){
printf("\nEnter the data:");
current->data=(char*)malloc(10*sizeof(char));
scanf("%s",current->data);
printf("stored at %p\n",(void*)current->data);
printf("%s",(char*)current->data);
printf("\nType '1' to continue, '0' to exit:\n");
scanf("%d",&user_choice);
if(user_choice == 1){
current->next=(node*)malloc(sizeof(node));
}
else{
current->next=NULL;
temp=current;
}
current=current->next;
}
return temp;
}
【问题讨论】:
-
当用户按0时,函数将返回NULL。有很多错误。请阅读一本书,重新思考你的代码,如果有问题再回来。
-
当
head为空,并且您打印错误消息(应该转到stderr,而不是stdout)时,您应该做一些事情,而不是继续下一行,要求head是非-空值。您的程序有未定义的行为。 -
@PaulOgilvie 感谢您的敏锐观察,我已修改代码以纠正此问题和其他错误。你能再看看是否还有其他问题..?发布在答案中。
-
我没有看到任何改进。还是有很多错误。
-
@PaulOgilvie,我已经添加了答案,更新了问题......
标签: c pointers linked-list void-pointers