子函数不能传递动态内存的原因解析
来源:互联网 发布:windows bug 编辑:程序博客网 时间:2024/05/04 09:12
举例:
voidGetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test 函数会有什么样的结果?
答:程序崩溃(段错误)。因为GetMemory 并不能传递动态内存,Test 函数中的str 一直都是 NULL。strcpy(str, "helloworld");将使程序崩溃。
我们知道,通过函数传递动态内存的方式有两种:返回内存的地址或者使用二级指针。用返回值的方式很容易理解,可为什么不能使用一级指针呢?
#include <stdio.h>
#include <stdlib.h>
void func(int *p)
{
printf("in func:\n");
printf("before malloc:\n");
printf("&p = %p, p = %p\n", &p, p);
p = (int*)malloc(1024);
printf("after malloc:\n");
printf("&p = %p, p = %p\n", &p, p);
}
int main()
{
int *p = (int *)malloc(3);
printf("in main:\n");
printf("&p = %p, p = %p\n", &p, p);
func(p);
printf("in main:\n");
printf("&p = %p, p = %p", &p, p);
free(p);
return 0;
}
#include <stdlib.h>
void func(int *p)
{
printf("in func:\n");
printf("before malloc:\n");
printf("&p = %p, p = %p\n", &p, p);
p = (int*)malloc(1024);
printf("after malloc:\n");
printf("&p = %p, p = %p\n", &p, p);
}
int main()
{
int *p = (int *)malloc(3);
printf("in main:\n");
printf("&p = %p, p = %p\n", &p, p);
func(p);
printf("in main:\n");
printf("&p = %p, p = %p", &p, p);
free(p);
return 0;
}
0 0
- 子函数不能传递动态内存的原因解析
- 解决动态内存传递不能传递的3种方法
- 函数不能传递动态内存
- 在函数调用/子函数中进行动态内存的分配
- 动态内存的传递
- 动态内存的传递
- 动态内存的传递
- 动态内存的传递
- py3.6中 变量不能同时作为global变量和子函数传递的变量
- 一级指针不能做函数参数传递动态内存的理解
- 使用子函数开辟内存的问题
- Perl子函数参数传递
- C++函数间动态内存的传递
- 传递动态内存遇到的问题
- 动态内存传递
- 传递动态内存
- 传递动态内存
- 传递动态内存
- IOS开发中的UIScreen、UIView、UIWindow和UIViewController
- Linux基础命令
- 网站排名做到首页咱们还要做什么
- 下载android源码,在android源码中增加模块,用模拟器运行新增模块。
- 我和我发小的两种人生
- 子函数不能传递动态内存的原因解析
- Gralde for Android
- web.xml 中的listener、filter、servlet 加载顺序及其详解
- 333333333333
- 某坑爹公司的笔记_Day04
- 用matlab把某个文件保存到txt文件里的方法
- iOS NSPredicate
- 学习C#的一点心得
- android OTA 升级优化之三: recovery ui美化