内存申请及存放位置问题
来源:互联网 发布:淘宝哪里看自己的等级 编辑:程序博客网 时间:2024/06/03 18:31
4.有关内存的思考题
void GetMemory(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, "hello world");将使程序崩溃。
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
(1)能够输出hello
(2)内存泄漏
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。
因为free(str);之后,str成为野指针,
if(str != NULL)语句不起作用。
- 内存申请及存放位置问题
- 关于Eclipse的图片存放位置及路径问题
- 在堆上申请空间存放对象的内存管理及析构函数调用时机
- UI 一一 资源存放及内存优化问题
- MTK 申请内存问题
- 申请内存的问题
- C++指针及内存申请时应该注意问题
- MySQL数据库文件介绍及存放位置
- MySQL数据库文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- iis日志存放位置 及 查看方法
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- MySQL数据文件介绍及存放位置
- Write Your Own Operating System Tutorial(中文版)- Lesson 3: NASM
- 内存占有计算
- Write Your Own Operating System Tutorial(中文版)- Lesson 4: Hello, World
- extern “C”
- Write Your Own Operating System Tutorial(中文版) -Lesson 5: 动起来!
- 内存申请及存放位置问题
- Write Your Own Operating System Tutorial(中文版) - Lesson 6: Boot Loader
- strlen和sizeof有什么区别?
- 软件书籍推荐
- #define 相关问题
- 用c#写画图形
- Linux系统信息查看命令大全
- #error 问题
- imz文件转img的方法