您的位置:首页 > 编程语言 > C语言/C++

GetMemory的典型例子

2016-12-30 20:47 267 查看
void GetMemory (char *p)
{
p = (char *)malloc(100);
}
void Test (void)
{
char *str = NULL;
GetMemory (str);
strcpy (str,"hello world");
printf (str);
}

       gcc编译会出现段错误         

       程序首先申请一个char类型的指针str,并把str指向NULL(即str里存的是NULL的地址,*str为NULL中的值为0),

调用函数 的过程  中做了如下动作:1、申请一个char 类型的指针p,2、把str的内容copy到了p里(这是参数传递过

程中系统所做的), 3、为p指针申请了 100个空间,4、返回Test函数.最后程序把字符 串hello world拷贝到str指向

的内存空间里.到这里错误出 现了!str的空间始终为 NULL而并没有实际的空间.     

        在调用GetMemory函数时为str分配了一块内存,即改变了指针str指向的地址。但在跳出GetMemory函数后刚才的

改变又失效 了,str的空间始终为NULL而并没有实际的空间。这其实是一个参数传递的问题,修改一级指针指需要传

递对应类型的二级指针。 

程序修改如下:

void GetMemory (char **p)
{
*p = (char *)malloc(100);
}

void Test (void)
{
char *str = NULL;
GetMemory (&str);
strcpy (str,"hello world");
printf (str);
}

 注意:要在函数内部改变某个变量的值,使之能在出了这个函数后,刚才的改变仍然有效,那就必须通过参数传入“指向          

             这个变量的指针”,而不是变量本身。也就是说,任何函数都不能把对参数本身的改变带到函数体外,所改的只是          

             这个参数所指向的变量的值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 指针 malloc