malloc分配0个字节


#include "pch.h"
#include <iostream>
#include <vector>
#include <ctime>
#include<algorithm>
using namespace std;


namespace _nmsp1
{
    
    
	//malloc来分配0个字节
	

	void func()
	{
    
    
		//真正要搞懂分配0个字节时,,malloc到底干了什么,,只有去读malloc的源码了。
		void *p = malloc(0); //new调用的也是malloc,所以
		//char *p = new char[0];
		char *q = (char *)p;

		//即便malloc(0)返回的是一个有效的内存地址,你也不要去动这个内存,不要修改内容,也不要去读;
		strcpy_s(q, 100, "这里是一个测试"); //这行导致程序出现暗疾和隐患;

		//有些编译器是在free时会报错,有些编译器是在分配0个字节时就可能会报错了,在
		//这里,vs2017malloc 0个字节时,返回了一个有效指针,不是一个空指针,但是在free时出现了异常。
		free(p);


		int abc;
		abc = 1;
	}
}

int main()
{
    
    	
	_nmsp1::func();	
	return 1;
}

//free时出现异常。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/112428705