这个代码最大的问题如图,temp是个指针,你在申请完内存后马上让它指向NULL,后面你想往temp拷东西必然程序要崩溃的。我估计你是想初始化为0。你可以用menset函数。
另外建议排序这个确实可以只改变指针指向就可以了没有必要那么多拷贝,交换他们在整个链表的位置。这应该也不算你说的改变了数据结构吧。
再者如果确实要拷贝也可以用memcpy函数一次性拷贝,把整个结构体拷贝过去,这样你的代码可以大大减少。
dev运行链表总是出问题的原因是代码错误、逻辑错误、内存泄漏、输入数据错误和编译器设置。解决方法如下:1、代码错误:检查你的代码是否存在拼写错误、语法错误等问题,可能需要逐行调试代码,找出具体出现问题的位置。
2、逻辑错误:链表 *** 作中常常存在逻辑上的问题,比如指针指向错误、链表结构不一致等问题。建议你仔细分析代码逻辑,确认各个指针和节点的关系是否正确。
3、内存泄漏:链表 *** 作时如果没有恰当地释放内存,可能会导致内存泄漏问题。确保你的代码在 *** 作完毕后释放了不需要的内存。
4、输入数据错误:输入数据错误也可能导致链表程序出现问题。特别是在使用用户输入数据时,需要进行合理检验和处理。
5、确认编译器设置:在编译链表程序时,需要确保编译器设置正确,并且使用了正确的参数。
你creat函数里面while语句有问题。测试创建是否成功的print函数我也顺手写了,你有没有需要这个自己决定。#include <iostream>
using namespace std
struct linknode{
int data
struct linknode *next
}
linknode* creat(){
int temp=-1
linknode *first,*tfirst,*p
first=(linknode *)malloc(sizeof(linknode))
tfirst=first
cout<<"Input"<<endl
while(temp!=0)
{
p=(linknode *)malloc(sizeof(linknode))
cin>>temp
if(temp==0)break
p->data=temp
tfirst->next=p
tfirst=tfirst->next
}
tfirst->next=NULL
return first
free(p)
}
void print(linknode *head)//print测试
{ linknode *p
p=head->next
if(!p)
{printf("NULL")
return}
while(p)
{printf("%2d",p->data)
p=p->next}
} //print结束
int main() {
linknode *head
head=creat()
print(head)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)