C++代码出现错误
#include "iostream"using namespace std;#include<malloc.h>#define LEN sizeof(struct adapt)struct adapt//链表{ int n; struct adapt *next;};struct adapt *creat(int x)//创建含有x个元素的链表{ struct adapt *head; struct adapt *p1,*p2; int n=0; p1=p2=(struct adapt*) malloc(LEN); cin>>p1->n; head=NULL; while(1) { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct adapt*)malloc(LEN); if(n<x) cin>>p1->n; else break; } p2->next=NULL; return(head);}struct adapt *insert(struct adapt *head,int n)//在链表首部插入n{ struct adapt *p=NULL; struct adapt a={0,p}; struct adapt *stud;stud=&a; stud->n=n; if(head==NULL) {stud->next=NULL;} else { stud->next=head; } return(stud);}void showLink(struct adapt * head){ struct adapt * temp=head; cout<<"Link Data:";// while (head!=NULL) { cout<<"->"<<head->n; head=head->next; } cout<<endl; head =temp;}int main(){ int n,m,s; cin>>n>>m; int *q=new int[m]; struct adapt* p; p=creat(n); for(int i=0;i<m;i++) { cin>>q[i]; } for(int j=0;j<m;j++) { cout<<"【Times:"<<j+1<<"】"<<endl;// p=insert(p,q[j]);// struct adapt ko; showLink(p);// } system("pause");}// linker.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;struct Link{ int nData; Link* pNext; Link(int n) { nData=n; pNext=NULL; } Link(){pNext=NULL;}};Link* Create(int nCount){ if (!nCount) { return NULL; } Link* Head=new Link; cin>>Head->nData; Link* pTemp=Head; for (int n=0;n<nCount-1;n++) { Link* pLinkNode=new Link; cin>>pLinkNode->nData; pTemp->pNext=pLinkNode; pTemp=pLinkNode; } pTemp->pNext=NULL; return Head;}void FreeLink(Link* pSource){ Link* pTemp=pSource; while(pTemp) { Link* p=pTemp->pNext; delete pTemp; pTemp=p; }}Link* Insert(Link*& pHead,int nData){ if (NULL==pHead) { pHead=new Link(nData); return pHead; } Link* pNewHead=new Link(nData); pNewHead->pNext=pHead; return pNewHead;}void ShowLink(Link*& pHead){ if (pHead) { Link* pTemp=pHead; while(pHead!=NULL) { cout<<pTemp->nData<<" "; if(NULL==(pTemp=pTemp->pNext)) { break; } } cout<<endl; }}int _tmain(int argc, _TCHAR* argv[]){ Link* pHead=Create(3); ShowLink(pHead); pHead=Insert(pHead,9); ShowLink(pHead); FreeLink(pHead); return 0;}
[解决办法]
原因是insert不对。参考如下修改:
//删,不能返回局部变量地址 struct adapt a={0,p};
struct adapt *stud=(struct adapt*)malloc(LEN);//改 stud=&a;