LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 735|回复: 4

看一下这个程序的内存泄漏问题该如何回答?

[复制链接]
发表于 2003-10-25 15:49:26 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *GetMemory(void)
{
        char p[] = "hello world";
        return p;
}
void main(void)
{
       char *str = NULL;
       str = GetMemory();
        printf(str);
}
运行结构为hell+“笑脸符”
给解释一下?
发表于 2003-10-25 15:59:00 | 显示全部楼层
p是GetMemory的局部变量,GetMemory结束以后p就不存在了,返回p肯定不对。
能不能说说你到底想干什么?要达到什么功能?
发表于 2003-10-25 22:05:47 | 显示全部楼层
p是在stack中分配的

但是
函数调用完后
它的stack就会被释放

所以
 楼主| 发表于 2003-10-26 21:48:26 | 显示全部楼层
不是想实现什么功能。知道这段代码是有问题的。
这是一个分析运行结果的题目。
函数中的变量是在调用后就释放了,拿这个例子来说,在调用完getmemory函数后,其实指针str是指想了在函数中P所指的空间,既存放"hello world"。
系统这时输出str的内容该是随机的吧?是不是如果系统目前只有这一个程序运行的话,那输出该是“hello world”呢? 我实际运行了几次,每次结果都是一样的。

我想问的是,关于这类缓冲区溢出或者内存泄漏的问题,分析运行结果该怎么回答?
发表于 2003-10-27 01:09:34 | 显示全部楼层
stack 内存
  调用函数------------------------>函数内操作会动态改变stack
  函数返回<------------------------
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表