关于VS2019调试问题:进程已退出,代码为-1073741819(已解决)
详情:上一篇发了这个进程问题,在我翻阅了《c语言程序设计第四版》和《算法与数据结构》两本书对照代码加上调试终于找到了解决方法
解决方法:
首先找到项目的源文件右击找到属性
然后选择从生成中排除选择是!
重新生成解决方案,发现代码问题:
之前的代码:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h>
//创建链表 struct linknode { int data; struct linknode* next; }; //初始化链表->创建一个空链表
struct linknode* init_list() { //创建头结点 struct linknode* head = malloc(sizeof(
struct linknode)); head->data = 0; head->next = NULL; //创建尾节点 struct linknode* p
= head; //获得用户输入 int nodedata = 0; while (1) { printf("请输入值(输入等于0的值退出):");
scanf_s("%d", &nodedata); if (nodedata == 0) { break; } //创建新结点 struct linknode*
newnode= malloc(sizeof(struct linknode)); newnode->data = nodedata; newnode->
next= NULL; //把新结点插入链表中 p->next = newnode; //更新尾指针 p = newnode; } return head;
//返回头节点即返回列表 } //在old_data值之后插入一个new_data值(在原来的结点后面串联一个新的结点) void addlist(struct
linknode* head, int old_data, int new_data); //删除数据 void dellist(struct
linknode* head, int deldata); //遍历打印链表 void showlist(struct linknode* head) {
/*if (head == NULL) { return; }*/ struct linknode* p = head->next;
//创建尾结点让他指向第一个空头结点的地址域 while (p != NULL) { printf("%d", p->data); p = p->next; }
} //清空链表 void clearlist(struct linknode* head); //摧毁链表 void destory_list(struct
linknode* head); int main() { struct linknode *head = init_list(); showlist(&
head); return 0; }
对照书修改后:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h>
#define LEN sizeof(struct linknode) //创建链表 struct linknode { int data; struct
linknode* next; }; //初始化链表->创建一个空链表 struct linknode* init_list() { //创建头结点
struct linknode* head =(struct linknode*) malloc(LEN); head->data = 0; head->
next= NULL; //创建尾节点 struct linknode* p = head; //获得用户输入 int nodedata = 0; while
(1) { printf("请输入值(输入等于0的值退出):"); scanf_s("%d", &nodedata); if (nodedata == 0) {
break; } //创建新结点 struct linknode* newnode = (struct linknode*)malloc(LEN);
newnode->data = nodedata; newnode->next = NULL; //把新结点插入链表中 p->next = newnode;
//更新尾指针 p = newnode; } return head;//返回头节点即返回列表 }
//在old_data值之后插入一个new_data值(在原来的结点后面串联一个新的结点) void addlist(struct linknode* head
, int old_data, int new_data); //删除数据 void dellist(struct linknode* head, int
deldata); //遍历打印链表 void showlist(struct linknode* head) { /*if (head == NULL) {
return; }*/ struct linknode* p = head->next;//创建尾结点让他指向第一个空头结点的地址域 while (p !=
NULL) { printf("%d\t", p->data); p = p->next; } } //清空链表 void clearlist(struct
linknode* head); //摧毁链表 void destory_list(struct linknode* head); int main() {
struct linknode* head = init_list(); showlist(head); return 0; }
增加了宏定义
修改了
struct linknode* newnode = (struct linknode*)malloc(LEN);
最后我们保存修改,移除c文件再重新导入一遍c文件或者可以重新启动VS2019,调试!
成功: