博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++内存分配
阅读量:6189 次
发布时间:2019-06-21

本文共 988 字,大约阅读时间需要 3 分钟。

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)语句不起作用。

 

 

转载于:https://www.cnblogs.com/smileallen/archive/2013/05/08/3391524.html

你可能感兴趣的文章
使用js生成漂亮的二维码,使用qrgen.js+canvas
查看>>
分布式配置中心-Disconf入门指南
查看>>
一入前端深似海,从此红尘是路人系列第四弹之未来前端路该何去何从
查看>>
PostgreSQL新手入门
查看>>
PHP 开发者该知道的 5 个 Composer 小技巧
查看>>
jdk8升级jdk11报 java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
查看>>
图形图像库集合
查看>>
sql中的类型转换
查看>>
Java内部类访问局部变量时的final问题
查看>>
lae界面开发工具入门之介绍三--<布局篇>
查看>>
Maven图文闪电入门
查看>>
Hadoop YARN最近几个新特性
查看>>
深入理解Java动态代理及手动实现
查看>>
Android xml manifest属性详解
查看>>
Xcode快捷键—图文详解
查看>>
项目启动加载报错
查看>>
PHP数据结构之实现链式二叉树与遍历
查看>>
HBase MapReduce实例分析
查看>>
shell 监控判断进程是否存在,如果不存在就重新启动脚本。
查看>>
oracle函数 length rpad lpad
查看>>