strcmp()函数中的分段错误
Segmentation Error in strcmp() function
下面的代码是在创建链表后对其进行排序。使用的排序算法是Bubble sort。不知何故,该代码在strcmp()函数中引发了Segmentation Fault。
附言:我还写了另一个版本,我没有计算节点的数量,而是使用指针来运行循环进行排序。也引发了分段故障。这一次在回路的"条件检查"中
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
using namespace std;
struct link_list
{
char value[20];
struct link_list *next;
};
int main()
{
struct link_list *head=NULL;
int i,j,count=0;
char input[20];
char ch;
struct link_list *temp=NULL,*temp2=NULL,*temp3=NULL,*temp4=NULL;
do /* Creating a link list*/
{
cout<<"Enter the string you want to insert";
cin>>input;
count++;
cout<<"Do you want to continue entering?";
cin>>ch;
if (head==NULL)
{
head=new link_list;
strcpy(head->value,input);
head->next=NULL;
continue;
}
for (temp=head;temp->next!=NULL;temp=temp->next);
temp2=new link_list;
temp->next=temp2;
strcpy(temp2->value,input);
temp2->next=NULL;
}while(ch=='y' || ch=='Y');
/*Printing the link list*/
for (temp=head;temp->next!=NULL;temp=temp->next)
{
cout<<temp->value<<"n";
}
cout<<temp->value<<"n";
temp=head;
temp2=head;
/*Using Bubble Sort to sort the list in ascending order*/
for (i=1;i<count-1;i++)
{
if (i==1)
temp=head;
else
temp=temp->next;
for (j=0;j<count-i;j++)
{
if (j==0)
temp4=head;
else
temp4=temp4->next;
temp2=temp4;
/*Comparing two subsequent nodes and swapping pointers if necessary*/
if (strcmp(temp2->value,temp2->next->value)>0)/*<----ERROR in some cases*/
{
/*Case where head node needs to adjusted, 2 nodes present in the list*/
if (temp2==head && temp2->next->next==NULL)
{
cout<<"Special1n";
head=temp->next;
temp2->next->next=temp;
temp2->next=NULL;
}
/*Case where head node needs to be adjusted*/
else if (temp2==head)
{
cout<<"Special2n";
head=temp2->next;
temp2->next=head->next;
head->next=temp2;
}
/*Rest of the cases*/
else
{
cout<<"Normal1n";
temp3->next=temp2->next;
temp2->next=temp3->next->next;
temp3->next->next=temp2;
cout<<"Normal2n";
}
}
temp3=temp4;
}
}
for (temp=head;temp->next!=NULL;temp=temp->next)
{
cout<<temp->value<<"n";
}
cout<<temp->value;
getch();
}
只有两种可能性:
temp2
无效(或为NULL)temp2->next
无效(或为NULL)
我猜是第二颗子弹。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?