`
ydbc
  • 浏览: 719384 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

关于内存的思考

 
阅读更多

一、


void GetMemory(char *p)
{

	p = (char*)malloc(100);
}

void Test(void)
{

	char *str = NULL;

	GetMemory(str);

	strcpy(str,"Hello,World");

	printf("%s",str);

}

请问运行Test有什么样的结果?


答:在函数内部修改形参并不能真正改变形参的值,执行完char *str = NULL; GetMemory(str);之后,str仍指向NULL。


二、

char* GetMemory(void)
{

	char p[] = "Hello,World";

	return p;
}

void Test(void)
{

	char *str = NULL;

	str = GetMemory();



	printf("%s",str);

}
请问运行Test有什么样的结果?

答:可能是乱码。执行char p[] = "Hello,World";return p;的p[]数组是局部变量,在函数返回后,内存已经释放掉。这是程序员经常犯的错误,在于程序员不理解变量的生存周期。


三、

char* GetMemory(char **p,int num)
{

	p = (char*)malloc(num);


	
}

void Test(void)
{

	char *str = NULL;

	GetMemory(&str,100);
	strcpy(str,"Hello,World");




	printf("%s",str);

}
请问运行Test有什么样的结果?

答:1、能够运行处Helolo,World.2、没有对malloc的内存进行释放。3、在申请内存之后没有判断申请内存是否成功。if(NULL == p)
exit(1);







分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics