关于malloc内存申请的深入研究
admin
2023-08-04 00:00:08
0

在内存申请和使用上总是会出现一些莫名其妙的问题,今天刚好又碰到了,这里总结一下。

//1.编译可以通过,但是执行不过。卡死在注释那一句
void test()
{
	char * str = (char *)malloc(100);
	strcpy(str,"hello");
	free(str);
	if(str != NULL)
	{
		strcpy(str,"world");
		printf("%s\n",str);//因为str已经free,所以对str的访问出现问题,卡死在这一步
	}
}
//---------------------------------------
//2.双指针是OK的
void getMemory(char **p,int num)
{
	*p = (char *)malloc(num);
}

void test()
{
	char *str = NULL;
	getMemory(&str,100);
	strcpy(str,"hello");
	printf("%s\n",str);
}

//-----------------------------------------
//3.编译通过,执行通过,返回垃圾文字。
char * getmemory()
{
	char p[] = "hello world";
	return p;
}

void test()
{
	char *str = NULL;
	str = getmemory();
	printf("%s\n", str);//因为getmemory()中返回的是局部变量的地址,
	//所以在getmemory()执行完毕后,该变量自动释放。所以访问失败。输出一些垃圾文字。
}
//-----------------------------------------
//4.编译通过,执行失败。
void getmemory(char *p)
{
	p = (char *)malloc(100);//内存空间申请后,指向这一空间的指针被释放
}

void test()
{
	char *str = NULL;
	getmemory(str);
	strcpy(str, "hello world");//str没有空间来容纳后面的字符串
	printf("%s\n", str);
}


相关内容

热门资讯

洪水逼近房顶,河北男子和12个... 据央视新闻,受极端强降雨影响,河北承德宽城满族自治县宽城镇、孟子岭乡、桲罗台镇、龙须门镇4个乡镇共9...
特写:航海日遇上台风“巴威” ... 中新网 温州7月12日电(周健 林文伊)7月11日,是第22个“中国航海日”,与往年的节日氛围不同,...
2026折叠屏与性能旗舰销量盘... 这期盘点有点特殊,既看折叠屏也看性能旗舰。原因很简单,最近后台问这两类的特别多。折叠屏从"炫技"走向...
加拿大总理卡尼展示才艺,媒体:... 当地时间7月12日,加拿大总理在卡尔加里牛仔节上大秀颠可丽饼手艺。视频画面里,卡尼两次抛掷可丽饼都稳...
“菲律宾有人驱车9小时,只为一... 在菲律宾东南部城市达沃,近日举行的一场太阳能技术展吸引了700多人到场,有些人甚至驱车9小时前来。这...
智利一海军士官驾车冲入集市,致... 据法新社和美联社报道,当地时间7月12日,智利警方通报,当天在比尼亚德尔马市,一辆汽车冲入集市人行道...
沈阳现破纪录大暴雨,街道行车如... 台风“巴威”协助副热带高压持续输送水汽,沈阳国家站今天凌晨以来累计雨量达到了198.7毫米,已打破7...
深耕产业场景 让机器人在真实需... ● 本报记者 程雪儿 近年来,大模型、具身智能、人形机器人成为机器人产业关注焦点。与此同时,新能源汽...
5000元以下笔记本越来越少了... 近期,“5000元以下笔记本基本绝迹”的话题引发广泛讨论。曾经三四千元随便挑的平价机型,如今在主流渠...
知名粤菜品牌,肠粉中发现防腐剂 爱吃肠粉的人,“天塌了”。6月23日,市场监管总局发布公告称,其近日组织食品安全监督抽检1865批次...