数据结构问题解决1——vs提示出现“xxx.exe中已触发了一个断点”错误

今个在写线性表顺序实现代码时,碰到了个大坑!

void DestroyList(SqList& L) {
	if (L.elem) {
		delete L.elem;
	}
	L.length = 0;
	L.elem = NULL;
	cout << "销毁成功!" << endl;
}

delete L.elem;//这行一直报错 

 在网上搜了搜资料后,原因可能是

  • 内存越界,比如“数组越界”、“释放已经释放掉的内存”、“共享内存引发的问题”、“释放野指针的问题”等。
  • 用到的第三方库版本不一致
     

需要自己慢慢调试解决

结果调试出来个这东西,

 然后被我瞎搞出来了其他没见过的东西

再次搜索各种资料后发现

对于自定义数据类型,我定义的时个book

struct Book {
	string id;	//IBSN
	string name;	//书名
	double price;	//价格
};

假设通过new申请了一个对象数组,

typedef struct {
	Book* elem;	//存储空间机制
	int length;	//表长
}SqList;

//初始化顺序表L
Status InitList(SqList& L) {
	L.elem = new Book[MAXSIZE];     //这里
	if (!L.elem) {
		exit(OVERFLOW);
	}
	L.length = 0;
	return OK;
}

对于此对象数组的内存释放,需要做两件事情:

  • 一是释放最初申请的那部分空间。
  • 二是调用析构函数完成清理工作。

对于内存空间的清理,由于申请时记录了其大小,因此无论使用delete还是delete[ ]都能将这片空间完整释放,而问题就出在析构函数的调用上,当使用delete时,仅仅调用了对象数组中第一个对象的析构函数,而使用delete [ ]的话,将会逐个调用析构函数。

所以就加了个[]就解决了
 

void DestroyList(SqList& L) {
	if (L.elem) {
		delete []L.elem;
	}
	L.length = 0;
	L.elem = NULL;
	cout << "销毁成功!" << endl;
}

总之,new申请的内存,释放时用delete,使用new [ ]申请的内存释放时要用delete [ ]

TODO:暂时感觉还有点不对劲,以后在看看!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值