这个程序用C++运行为什么不出结果呢?
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode;
int initlist(Lnode *L){
Lnode *p,*r;
int i;
L=(Lnode*)malloc(sizeof(Lnode));
if(!L) exit(1);
L->next=NULL;
r=L;
for(i=1;i<=10;i++){
p=(Lnode*)malloc(sizeof(Lnode));
scanf("%d",&p->data);
r->next=p;r=p;
}
r->next=NULL;
return;
}
void printlist(Lnode *L){
int e[10],i;
Lnode *p;
p=L;
for(i=0;i<10;i++){
e[i]=p->data;
printf("%d",e[i]);
p++;
}
}
main(){
int n;
Lnode L;
initlist(&L);
printlist(&L);
return(0);
}
答案:楼上“xjumabin”犯概念性错误,scanf("%d",p)将导致不可预知的内存错误。
你的代码我大致改了下,测试的运行结果:
Enter 10 numbers:
1
2
3
4
5
6
7
8
9
0
1 2 3 4 5 6 7 8 9 0
Press any key to continue
--------------------
VC6,Win-TC2调试通过。代码如下,仔细看看注释:
-------------
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAXNODE 10 // 链表长度,至少为1
typedef int Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
/*
} Lnode; // 有歧义,最好不要把struct Lnode重命名为Lnode,建议重命名为NODE,以便区别
*/
} NODE, *LIST;
int initlist(LIST L)
{
NODE *p=NULL,*r=L;
int i=0;
/*
L=(LIST)malloc(sizeof(NODE)); // 不能在这里改变L的值,应该在main函数中申请。
*/
if(!L) exit(1);
scanf("%d",&L->data); // 首元素的data在这里输入
L->next=NULL;
for(i=2;i<=MAXNODE;i++) // 下标从2开始循环
{
p=(NODE*)malloc(sizeof(NODE));
scanf("%d",&p->data);
r->next=p;
r=p;
}
r->next=NULL;
return 0; // 必须返回整型值
}
void printlist(LIST L)
{
NODE *p=L;
while(p)
{
printf("%d ",p->data);
if(p->next) p=p->next; else p=NULL; // 或者简写为 p=(p->next)?p->next:NULL;
}
printf("\
");
}
void freelist(LIST L) // 由于程序中使用malloc动态分配空间,因此需要使用free来手动释放
{
NODE *p=L,*tmp=NULL;
while(p)
{
if(p->next) tmp=p->next; else tmp=NULL; // 或者简写为 tmp=(p->next)?p->next:NULL;
free(p);
p=tmp;
}
}
int main() // 返回整型值的函数需要正确的声明返回值类型
{
/*
int n; // 未使用的局部变量
*/
LIST L=(LIST)malloc(sizeof(NODE));
printf("Enter %d numbers:\
",MAXNODE);
initlist(L);
printlist(L);
freelist(L); // 释放空间
getch();
return(0);
}
上一个:C++ 关于delete 和new 函数的问题
下一个:c++中 怎样声明多虚部的复数