- 论坛徽章:
- 0
|
--------------------------------------------------------------------------------
QUOTE:char ** getMem(void)
{
char **p;
p = malloc(4*sizeof(char *));
p[0] ...
lixiaxin200319 发表于 2011-03-17 23:13
谢谢lixiaxin200319的回答,不过个人理解有点不同。作为一个变量,返回的时候,值是在返回值里面的。这里是动态分配,不会在函数结束的时候释放掉已经分配的,所要的,就是一个分配的地址值而已。
呵呵
我写了代码测试,你是对的。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **getMem()
{
char **p;
p = (char **)malloc(4*sizeof(char *));
p[0] = (char *)malloc(100);
strcpy(p[0],"ni hao");
p[1] = (char *)malloc(100);
strcpy(p[1],"hell");
return p;
}
int main()
{
char **pMem;
pMem = getMem();
printf("pMem[0] = %s\n",pMem[0]);
printf("pMem[1] =%s\n",pMem[1]);
free(pMem);
free(pMem[1]);
//free(pMem[0]);
}
该程序用malloc()动态分配的内存空间只能用free(pMem[0])、free(pMem[1]),这样的方式一个个的释放,用free(pMem)其实就是与free(pMem[0])执行一样的操作。
如果把 //free(pMem[0])的注释去除,在程序执行时就会因为重复释放pMem[0]而报错。 |
|