realloc()与free()函数触发断点的讨论

a 夏天 提交于 2020-02-07 20:56:33

1.由于指针所指位置不同,而导致的断点

void main()
{
	char *str;
	str = (char *)malloc(15);
	strcpy(str,"runoob");
	printf("string=%s\nadress=%p\n", str,str);
                        //%p格式符会输出指针本身的值,也就是指针指向的地址值
	str = (char *)realloc(str,25);
	str = "string";
	printf("string=%s\nadress=%p\n", str, str);

	free(str);
	
	system("pause");

}

编译输出
在这里插入图片描述
由此,我们可以观察到两次str中保存的的地址不同,即指针两次指向不同的内存单元,所以在free时会触发断点
如图所示
在这里插入图片描述
再来看一个例子

void main()
{
	int i=10;
	int *p;
	p = (int *)malloc(20);
	printf("adress=%p", p);
	p = &i;
	printf("adress=%p", p);
	free(p);
}

这是在给指针p分配了空间后又给p赋值
来看编译后的输出
指针所指位置不同,进而释放时触发断点
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!