内存重叠,以及释放的测试

写一个嵌套指针的结构体时候,各种莫名的堆损坏的错误,推荐一个工具https://blog.51cto.com/danielllf/1598204

下面是我测试的代码

#include "stdafx.h"
#include <iostream>

using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	char* str = (char*)malloc(32 * sizeof(char));
	memset(str, -99, 32);
	int ptr =(int)str;		                                 //固定指针地址
	char *temp;
	memcpy(&temp, &ptr, sizeof(char)*32);                       //使str和temp开辟的内存重叠
	memset(temp, -100, 32 * sizeof(char));					     //
	realloc(temp,32*sizeof(char));					             //这一步会报错
	free(str);												     //注释上面一行,这个地方会报错
	cout << "释放str" << endl;
	free(temp);
	cout << "释放temp" << endl;
	return 0;
}

按道理来说,定义了两个指针,并且开辟了内存,应该都要释放,但是上面当释放指针str的时候,会报错。

其中,str和temp开辟的指针应该是重叠了,如果只释放temp是可以的,但是不知道有什么风险,或者犯了什么低级错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值