返回信息流下面的程序对顺序表进行就地逆置,在输入时出现问题:“0x00410f9”指令引用的“0x00000000”内存。该内存不能为“written”。等待大虾指点!谢谢!
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define LIST_INIT_SIZE 20
#define LISTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
int CreateSq(Sqlist L){
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(1);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 0;
}
void inputdata(Sqlist L){
ElemType a,*p;
p=L.elem;
while(1){
scanf("%d",&a);
if(a==-1)
break;
p[L.length++]=a;
if(L.length==LIST_INIT_SIZE){
printf("memory full!\n");
break;
}
}
}
void reverse(Sqlist L){
int i;
ElemType temp;
for(i=0;i<L.length/2;i++)
{
temp=L.elem[i];
L.elem[i]=L.elem[L.length-1-i];
L.elem[L.length-1-i]=temp;
}
}
void display(Sqlist L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%d\t",L.elem[i]);
}
printf("\n");
}
void main()
{
Sqlist L;
L.elem=NULL;
L.length=0;
L.listsize=0;
CreateSq(L);
printf("please input data,end with -1:\n");
inputdata(L);
printf("Original list:");
display(L);
reverse(L);
printf("Reversed list:");
display(L);
free(L.elem);
}
编译没有错误。输入不行,谢谢了!
这是一条镜像帖。来源:北邮人论坛 / cpp / #37108同步于 2010/3/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
往顺序表赋值出现错误!高手指点!
gccsupersoft
2010/3/27镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
显然是你在什么地方引用了空指针
【 在 gccsupersoft (千年一梦) 的大作中提到: 】
: 下面的程序对顺序表进行就地逆置,在输入时出现问题:“0x00410f9”指令引用的“0x00000000”内存。该内存不能为“written”。等待大虾指点!谢谢!
: #include <stdio.h>
: #include <stdlib.h>
: ...................
改为这样就正确了:
#include <stdio.h>
#include <stdlib.h>
#define ElemType int
#define LIST_INIT_SIZE 20
#define LISTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
int CreateSq(Sqlist &L){
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
exit(1);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 0;
}
void inputdata(Sqlist &L){
ElemType a,*p;
p=L.elem;
while(1){
scanf("%d",&a);
if(a==-1)
break;
p[L.length++]=a;
if(L.length==LIST_INIT_SIZE){
printf("memory full!\n");
break;
}
}
}
void reverse(Sqlist &L){
int i;
ElemType temp;
for(i=0;i<L.length/2;i++)
{
temp=L.elem[i];
L.elem[i]=L.elem[L.length-1-i];
L.elem[L.length-1-i]=temp;
}
}
void display(Sqlist L)
{
int i;
for(i=0;i<L.length;i++)
{
printf("%d\t",L.elem[i]);
}
printf("\n");
}
void main()
{
Sqlist L;
L.elem=NULL;
L.length=0;
L.listsize=0;
CreateSq(L);
printf("please input data,end with -1:\n");
inputdata(L);
printf("Original list:");
display(L);
reverse(L);
printf("Reversed list:");
display(L);
free(L.elem);
}
函数中要用引用调用,Sqlist L是定义的结构体,这样只会是传值,要传地址。
Sqlist【 在 gccsupersoft 的大作中提到: 】
: 下面的程序对顺序表进行就地逆置,在输入时出现问题:“0x00410f9”指令引用的“0x00000000”内存。该内存不能为“written”。等待大虾指点!谢谢!
: #include <stdio.h>
: #include <stdlib.h>
: ...................