用vs2017编译c++时出现错误: 0xC0000005: 读取位置 0xCDCDCDCD 时发生访问冲突

在使用模板类的函数实例时,遇到0xC0000005错误,原因是使用了未初始化的内存块。0xCDCDCDCD是调试时未分配内存的标志。解决方案是确保对结构体数据域进行初始化,如使用memset()函数。C++指针的潜在风险提示开发者尽量避免不必要的指针使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指针真的会乱指

笔者在一次数据结构的实验时,构造了以下代码
StuInfo<T> *p = new StuInfo<Data>;
		p=head;
	if (account <= 0) return 0;
	for (int k = 0; k < account; k++)
	{
		if (p == 0) return 0;
		if (count == 0) { head = info; count++; return -1; }
		if (p->next == 0) { p->next = info; count++; return -2; }
		p = p->next;
	}
	info->next = p->next;
	p->next = info;
	return 1;

这段代码是采用模板形式的类中的函数实例,在编译过程中是通过的,但是运行到

info->next = p->next;

时会出现
0xC0000005: 读取位置 0xCDCDCDCD 时发生访问冲突
的程序中断提示,经多方查证,得知:

* 0xcdcdcdcd : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory

就是使用了定义了但未初始化的内存块,从而导致指针在debug时赋予了一个0xcdcdcdcd,也就是一个报错时经常见到的字符

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值