这段程序哪里错了,会报错~

#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

回到顶部