我在tc中变了一个小程序,执行结果却有这个提示,这是为什么呢?

paulxj 2003-07-31 05:58:11
0123456789
01243456789
0123456789
Null pointer assignment \\怎么会有这句话??问题出在哪?


附:程序内容,顺序表的插入与删除

#include<stdio.h>
#define ListSize 50
typedef int DataType;
typedef struct{
DataType data[ListSize];
int i;
}SeqList;

SeqList *s;


void InsertList(DataType x,int j)
{ int k;

if(s->i==ListSize||j>ListSize)
printf("error!");
else
{for(k=s->i;k>=j;k--)
s->data[k+1]=s->data[k];
s->data[j]=x;
s->i++;
}
}

void DeleteList(int j)
{ int k;

if(j>s->i||j<0)
printf("error!");
else
{ for(k=j;k<s->i;k++)
s->data[k]=s->data[k+1];
s->i--;
}
}


void print()
{ int k;
for(k=0;k<s->i;k++)
printf("%d",s->data[k]);
printf("\n");
}

main()
{ int i;
s->i=0;

for(i=0;i<10;i++)
{ s->data[i]=i;
s->i++;
}
print();
InsertList(4,3);
print();
DeleteList(3);
print();
}


...全文
14 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxen 2003-08-02
帖子该结了吧!!
回复
kxen 2003-08-01
强制类型转换,malloc函数的返回类型时 (void *),
不强制转换就会出现将(void *)类型隐式转换成(SeqList *)而报错。

不知你用的是什么编译器,我不明白你的编译器怎么会不理会这些细节。
回复
ehhl 2003-08-01
是那个问题,^_^
回复
lth_81 2003-08-01
-_-!!
回复
danceflash 2003-08-01
强制类型转换
malloc函数的返回类型时 (void *)
要强制类型转换为你所需要的指针类型
回复
paulxj 2003-08-01
再问楼上

s = (SeqList *)malloc(sizeof(SeqList));

其中(SeqList *)这一部分是什么意思?我试了,有没有都一样
回复
kxen 2003-07-31
刚才我是过了,只要在s使用前给他分配个地址就解决了:

s = (SeqList *)malloc(sizeof(SeqList));

另外最好在程序结尾加上个 getch();
有利于察看结果



唉,说的晚了,不知道能不能分到分。
回复
blade1980 2003-07-31
呵呵 没有初始化吧
回复
Icat 2003-07-31
Null pointer assignment
在windows下就出现AV错误
同意楼上说的,不过他是tc的程序
就要用malloc来分配内存
也完全可以把
SeqList *s;
改成SeqList s;
然后把->改成.
呵呵
回复
lth_81 2003-07-31
解决方法:
main()
{ int i;
s = new SeqList();//分配空间
s->i=0;
回复
lth_81 2003-07-31
表示你是用了空指针进行赋值~~不知道说的对不对
问题在这里

SeqList *s;//你声明了这个指针,但是没有给他分配空间

main()
{ int i;
s->i=0;//这里你在没有分配空间的情况下赋值,就是这个错误
.....
回复
paulxj 2003-07-31
简单问题,还请帮忙!
回复
发动态
发帖子
C语言
创建于2007-09-28

6.2w+

社区成员

C语言相关问题讨论
申请成为版主
社区公告
暂无公告