今天遇到了两次内存释放错误,不一样的情形导致的,但出现的错误提示是一样的。如图:
第一次的内存错误代码是这样的
struct StackNode{
int element;
StackNode* next;
};
StackNode* s = (StackNode*)malloc(sizeof(StackNode*));
free(s);
内存释放错误因为内存空间分配时出错了,应该是:
StackNode* s = (StackNode*)malloc(sizeof(struct StackNode));
因为分配的结构类型出错,释放内存空间是计算机不知道这个类型,故出错。
第二次内存释放错误:
typedef int elm_type;
elm_type*a = new elm_type[10];
delete []a;
开始我是用的:
elm_type *a = (elm_type*)malloc(sizeof(elm_type) * 10);
free(a);
我以为malloc的局限性导致的,换了new和delete仍然是这个错误,后来发现原来是我在对a的操作越界了,出现了a[10],造成内存释放错误。