segmentation fault :11错误

Lyp_student 2018-01-28 05:34:35
是用mac写的,然后利用终端执行,调试了很久,问题在Inser_list函数的if下,但是不知道怎么解决啊!!
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{ int data;
struct node *next;

}linklist;
void Insert_list(linklist *rear,int entag)//利用尾插法插入元素。
{
int val;
//int x =0;
//linklist *rear=L;
printf("准备赋值");
scanf("%d",&val);
if(val==entag)
rear =NULL;
//printf("完成");
//{rear = (linklist*)malloc(sizeof(linklist));rear->next=NULL;rear->data=45;printf("完成");}
else
{
rear = (linklist*)malloc(sizeof(linklist));
rear->data = val;
printf("\n————————————完成————————————\n");
Insert_list(rear->next,entag);

}
}
void init_list(linklist *head)
{
head = (linklist*)malloc(sizeof(linklist));
head->next = NULL;
printf("\n初始化完成\n");
}

void print_list(linklist *head)
{ linklist *p=head->next;
printf("准备输出:");
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("链表为空");
}

int main()
{ linklist *L;

printf("创建成功");
L = (linklist*)malloc(sizeof(linklist));
linklist *rear = L;
init_list(L);
Insert_list(rear,4);
print_list(L);

return 0;}
...全文
1445 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jena_wy 2018-01-29
  • 打赏
  • 举报
回复
scanf("%d",&data);包含回车符。
Lyp_student 2018-01-28
  • 打赏
  • 举报
回复
引用 5 楼 super_admi的回复:
你这个不是最后指针为空的问题。最后的指针为空是对的。你这里主要是参数的问题,你没理解参数是怎么传递的。 按照你的想法,我把代码做了些优化:

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

typedef struct tagNode
{
    int             data;
	struct tagNode* next;
}Node;

Node* getNode(int data)
{
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;
    return (node);
}

void append(Node* last)
{
	int data = 0;
	printf("准备赋值:");
	scanf("%d",&data);
	if(data > 0)
	{
	    last->next = getNode(data);
	    append(last->next);
	}
}

void display(Node *head)
{
    Node* node = head;
    int data = 0;
	printf("准备输出:\n");
	while(NULL != node)
    {
        printf("data: %d\n", (data = node->data, node = node->next, data));
    }
}

void destroy(Node* head)
{
    Node* node = head;
    int data = 0;
	printf("准备释放:\n");
	while(NULL != node)
    {
        printf("free: %d\n", (data = node->data, head = head->next, free(node), node= head, data));
    }
}

int main()
{
    Node *head = getNode(-1);
	append(head);
	display(head);
	destroy(head);
	return (0);
}
好的,谢谢,我再研究一下
super_admi 2018-01-28
  • 打赏
  • 举报
回复
你这个不是最后指针为空的问题。最后的指针为空是对的。你这里主要是参数的问题,你没理解参数是怎么传递的。 按照你的想法,我把代码做了些优化:

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

typedef struct tagNode
{
    int             data;
	struct tagNode* next;
}Node;

Node* getNode(int data)
{
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = NULL;
    return (node);
}

void append(Node* last)
{
	int data = 0;
	printf("准备赋值:");
	scanf("%d",&data);
	if(data > 0)
	{
	    last->next = getNode(data);
	    append(last->next);
	}
}

void display(Node *head)
{
    Node* node = head;
    int data = 0;
	printf("准备输出:\n");
	while(NULL != node)
    {
        printf("data: %d\n", (data = node->data, node = node->next, data));
    }
}

void destroy(Node* head)
{
    Node* node = head;
    int data = 0;
	printf("准备释放:\n");
	while(NULL != node)
    {
        printf("free: %d\n", (data = node->data, head = head->next, free(node), node= head, data));
    }
}

int main()
{
    Node *head = getNode(-1);
	append(head);
	display(head);
	destroy(head);
	return (0);
}
Lyp_student 2018-01-28
  • 打赏
  • 举报
回复
引用 3 楼 super_admi的回复:

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{	int data;
	struct node *next;

}linklist;
void Insert_list(linklist **rear,int entag)//利用尾插法插入元素。
{
	int val;
	//int x =0;
	//linklist *rear=L;
	printf("准备赋值");
	scanf("%d",&val);
	if(val==entag)
		(*rear) =NULL;
		//printf("完成");
		//{rear = (linklist*)malloc(sizeof(linklist));rear->next=NULL;rear->data=45;printf("完成");}
	else
	{
		(*rear) = (linklist*)malloc(sizeof(linklist));
		(*rear)->data = val;
		printf("\n————————————完成————————————\n");
		Insert_list(&((*rear)->next),entag);

	}
}
void init_list(linklist **head)
{
	(*head) = (linklist*)malloc(sizeof(linklist));
	(*head)->next = NULL;
	printf("\n初始化完成\n");
}

void print_list(linklist *head)
{	linklist *p=head->next;
	printf("准备输出:\n");
	while(p!=NULL)
	{
		printf("%d\n",p->data);
		p=p->next;
	}
printf("链表为空");
}

int main()
{	linklist *L;

	printf("创建成功");
	//L = (linklist*)malloc(sizeof(linklist));
	//linklist *rear = L;
	init_list(&L);
	Insert_list(&(L->next),4);
	print_list(L);

return 0;}
那为什么之前写法不行呢,链表最后指针为空不也应该可以吗?
super_admi 2018-01-28
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{	int data;
	struct node *next;

}linklist;
void Insert_list(linklist **rear,int entag)//利用尾插法插入元素。
{
	int val;
	//int x =0;
	//linklist *rear=L;
	printf("准备赋值");
	scanf("%d",&val);
	if(val==entag)
		(*rear) =NULL;
		//printf("完成");
		//{rear = (linklist*)malloc(sizeof(linklist));rear->next=NULL;rear->data=45;printf("完成");}
	else
	{
		(*rear) = (linklist*)malloc(sizeof(linklist));
		(*rear)->data = val;
		printf("\n————————————完成————————————\n");
		Insert_list(&((*rear)->next),entag);

	}
}
void init_list(linklist **head)
{
	(*head) = (linklist*)malloc(sizeof(linklist));
	(*head)->next = NULL;
	printf("\n初始化完成\n");
}

void print_list(linklist *head)
{	linklist *p=head->next;
	printf("准备输出:\n");
	while(p!=NULL)
	{
		printf("%d\n",p->data);
		p=p->next;
	}
printf("链表为空");
}

int main()
{	linklist *L;

	printf("创建成功");
	//L = (linklist*)malloc(sizeof(linklist));
	//linklist *rear = L;
	init_list(&L);
	Insert_list(&(L->next),4);
	print_list(L);

return 0;}
Lyp_student 2018-01-28
  • 打赏
  • 举报
回复
引用 1 楼 super_admi的回复:
大坑!!!!!
什么意思啊!
super_admi 2018-01-28
  • 打赏
  • 举报
回复
大坑!!!!!
手把手讲授如何搭建成功OpenVINO框架,并且使用预训练模型快速开发超分辨率、道路分割、汽车识别、人脸识别、人体姿态和行人车辆分析。得益于OpenVINO框架的强大能力,这些例子都能够基于CPU达到实时帧率。课程的亮点在于在调通Demo的基础上更进一步:一是在讲Demo的时候,对相关领域问题进行分析(比如介绍什么是超分辨率,有什么作用)、预训练模型的来龙去脉(来自那篇论文,用什么训练的)、如何去查看不同模型的输入输出参数、如何编写对应的接口参数进行详细讲解;二是基本上对所有的代码进行重构,也就是能够让例子独立出来,并且给出了带有较详细注释的代码;三是注重实际运用,将Demo进一步和实时视频处理框架融合,形成能够独立运行的程序,方便模型落地部署;四是重难点突出、注重总结归纳,对OpenVINO基本框架,特别是能够提高视频处理速度的异步机制和能够直接部署解决实际问题的骨骼模型着重讲解,帮助学习理解;五是整个课程准备精细,每一课都避免千篇一律,前一课有对后一课的预告,后一课有对前一课的难点回顾,避免学习过程中出现突兀;六是在适当的时候拓展衍生,不仅讲OpenVINO解决图像处理问题,而且还补充图像处理的软硬选择、如何在手机上开发图像处理程序等内容,帮助拓展视野,增强对行业现状的了解。基本提纲:1、课程综述、环境配置2、OpenVINO范例-超分辨率(super_resolution_demo)3、OpenVINO范例-道路分割(segmentation_demo)4、OpenVINO范例-汽车识别(security_barrier_camera_demo)5、OpenVINO范例-人脸识别(interactive_face_detection_demo)6、OpenVINO范例-人体姿态分析(human_pose_estimation_demo)7、OpenVINO范例-行人车辆分析(pedestrian_tracker_demo)8、NCS和GOMFCTEMPLATE9、课程小结,资源分享

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧