内存
来源:互联网 发布:跳跃网络的游戏就300吗 编辑:程序博客网 时间:2024/05/01 23:20
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
程序崩溃。因为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);
}
可能是乱码。因为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);
}
(1)能够输出hello
(2)内存泄露
void Test(void)
{
char *str = (char *)malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if (str != NULL)语句不起作用。
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- 内存
- Programming Microsoft Windows with Csharp. Chapter 1
- [转载]java中文问题
- 9个值得一看的公司博客
- C语言 二叉树的结构和遍历算法
- Liferay 学习笔记
- 内存
- 项目管理理论和实践:第2回 系统开发工程的计划
- j2me中的小技巧-----如何减小程序的大小
- 指针数组
- 苹果电脑CEO斯蒂夫·乔布:我生命中的三个故事
- 双机互联
- Trados 不支持某些语种的 TM 的解决方法
- Windows Server 2008虚拟技术 - 小小注意points
- 2008-05-26:修改系统参数(2008-05-26)