首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问内存的思考题

2012-04-13 
请教内存的思考题今天看高质量C、C++看见一个内存的思考题有些不理解请教各位void GetMemory(char *p){p

请教内存的思考题
今天看高质量C、C++ 看见一个内存的思考题 有些不理解 请教各位
void GetMemory(char *p)
{
  p = (char *)malloc(100);
}
void Test(void)
{
  char *str = NULL;
  GetMemory(str);
  strcpy(str, "hello world");
  printf(str);
}
程序崩溃。这个还可以理解,因为将指针str的传给p 但是值传递所以Test函数中的str值一直为NULL;
  
疑问一: 但是形参用指向指针的指针就可以,如下 这和上面有什么不同之处么
void GetMemory(char **p, int num) //形参用指向指针的指针**p
{
  *p = (char *)malloc(num);
}
void Test(void)
{
  char *str = NULL;
  GetMemory(&str, 100);
  strcpy(str, "hello");
  printf(str);
}

疑问二: 对于下面的一个例子,虽然可以输出hello 但是由于没有释放malloc申请的空间,造成内存泄露,这怎么解决?

[解决办法]
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
p在函数体里其实是一个副本_p,p = (char *)malloc(100)只是为_p分配了空间,而p没有。

void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
副本_p是char **的,_P和p指向的地方相同,所以为*_P分配空间也是为*分配空间,也就是char*
[解决办法]

探讨

还是没明白 谁能说明白点?

[解决办法]
&str是指指针变量的地址
探讨
主要是指针的指针这块的表达太容易混了

现在我基本明白了
void GetMemory(char **p)
{
*p = (char *)malloc(100);
}
其实p就是指针变量str的地址 用*p其实就将str的值变了
在main函数中 strcpy语句中使用str的过程应该是有str去寻找str所在地址中的值
这样实际就把str给改变了



引用 1……

热点排行