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

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

#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);


表达式问题?

【热门文章】
【热门文章】