这段程序哪里错了,会报错~
#include "stdlib.h"#include "stdio.h"
#include <malloc.h>
#define ListSize 10
typedef int DataType;
typedef struct{
DataType data[ListSize];
int length;
}seqlist;
#define n 8
#define Error printf
void deletelist(seqlist *L);
void insertlist(seqlist *L);
main(){
seqlist *L;
int i;
char c;
int m[n];
printf("请按递减序输入%d个整数(以空格为间隔):\n",n);
for(i=0;i<n;i++){
scanf("%d",&L->data[i]);
/*scanf("%d",&m[i]);*/
}
L->length=8;
printf("请选择:\n");
}
回答:
这种框99%的问题是内存越界,在Win98以下显示为著名的“非法操作”框。
千万注意:仅仅声明了指针变量,并不意味着给指针变量赋了值,更不意味着指针获得了存储结构体所需要的内存空间。
此程序中L的值是未定义的随机值。这个现象的恐怖之处不在于他会出错,在于如果整合进一个非常大的程序,就有可能有概率不出错。不出错就意味着L恰好被指向到了此程序内部的内存空间,则对L的操作可能覆盖掉此程序任何地方,正在使用的,任意的其他变量,造成不可想象的任何严重后果。
所以我求您了新手君,请一定在声明了指针变量之后的第一时间就分配内存。最好把分配内存的函数,单独写一个(seqlist *) newlist(int length);
函数封装起来。
如果是C++这个问题就好办得多,构造和析构函数,把所有的内存问题在类的范围内完全搞定。
回答:
没有为L分配内存
改改:
seqlist *L = (seqlist *)malloc(sizeof(seqlist));
最后记得
free(L);
回答:
表达式问题?
以上是 这段程序哪里错了,会报错~ 的全部内容, 来源链接: utcz.com/p/194060.html