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);
}
注意:要在函数内部改变某个变量的值,使之能在出了这个函数后,刚才的改变仍然有效,那就必须通过参数传入“指向
这个变量的指针”,而不是变量本身。也就是说,任何函数都不能把对参数本身的改变带到函数体外,所改的只是
这个参数所指向的变量的值。
{
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);
}
注意:要在函数内部改变某个变量的值,使之能在出了这个函数后,刚才的改变仍然有效,那就必须通过参数传入“指向
这个变量的指针”,而不是变量本身。也就是说,任何函数都不能把对参数本身的改变带到函数体外,所改的只是
这个参数所指向的变量的值。
相关文章推荐
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子
- GetMemory的典型例子分析
- 【转】一定要搞死GetMemory()
- Getphonenumber获得电话号码的例子
- [置顶] Django1.4典型例子(很详细的步骤)
- GetMemory错误讲解(指针练习)
- JAVA中建立多线程的典型例子
- 查看进程所用的内存(使用GetWindowThreadProcessId取得进程ID,OpenProcess打开进程和GetProcessMemoryInfo取得内存信息)
- GetProcessMemoryInfo函数
- GetMemory错误讲解(指针练习)
- GetProcessMemoryInfo函数
- jQuery 获取URL的GET参数值的小例子
- getmemory /dispose
- js 简单的get 小例子
- 利用GetProcessMemoryInfo 获取进程内存使用
- GetMemory 改错