`
BruceXX
  • 浏览: 139444 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

CSDN上看到关于C++ 指针参数。。无语

    博客分类:
  • C++
阅读更多
在CSDN 上看到这么三个题,下面各种千奇百怪的回答真是参差不齐。。
只能用很无语来回答。


1。void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
2。char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}

3。Void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}

只能自言自语的说下了,尽管很基础。。。

第一个在GetMemory 方法体里面会产生一个临时的局部副本指针_p=(char *)malloc(100);_p=p,  这里 _p 申请了堆空间,只是改变了_p所指内容的地址(即_p),但是p是没有变化。
在GetMemory方法体结束后,_p 会在堆里面没有free,有可能内存泄露。。

第二个p是栈内存,是系统自动分配的,函数体后会制动销毁,返回的内容是未知地。。。

第三个同第一个MS是一样的。。 这时候依然_p=p,  *_p分配空间,改变了*_p,*p有值了,即str有地址了,但是p其实是未知的,出来后*_p在堆里面没有free,有可能内存泄露

为了不让内存泄露

可以改造为==>


char *GetMemory2( int num)
{
char *p = (char *)malloc(num);
return p;
}
void Test(void)
{
char *str = GetMemory(str, 100);
strcpy(str, "hello");
printf(str);
free(str);
}





分享到:
评论

相关推荐

    C和C++指针

    对于新手来说比较好学习,比较基础,实用类型。

    c++之指针作为函数参数传递的问题.pdf

    c++之指针作为函数参数传递的问题的pdf版本 博客:http://blog.csdn.net/fjb2080 欢迎访问!

    c++11 智能指针(csdn)————程序.pdf

    c++11 智能指针(csdn)————程序

    时钟绘图 C++指针式时钟

    该程序的使用平台是windows操作系统下的Visual C++6.0软件,不需要安装只要打开该project的dsw类型文件,点击运行即可。 实现功能: (1)程序启动时自动进入绘图模式; (2)创建线程重绘时钟,线程重绘时间间隔为1...

    c++智能指针的实现

    智能指针是用来实现指针指向的对象的共享的。其实现的基本思想: 每次创建类的新对象时,初始化指针并将引用计数置为1; 当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数; 对一个...

    c++中指针的详细介绍

    本书介绍了如何学好指针,对于c/c++刚入门的人会有帮助,想学好c++的朋友,可以去看看。

    C++函数的指针

    指针 不仅可以只想变量 常量 数组 还可以指向函数 。 本资源利用函数指针调用 求和函数

    c++调用dll ,指针结构体参数传递

    c++调用dll ,指针结构体参数传递,--改造了csdn 上的一个程序。

    学生成绩管理系统c++ csdn

    学生成绩管理系统c++自己做的 完整版 学生成绩管理系统c++ 学生成绩管理系统c++

    C++_智能指针详解

    C++ 智能指针详解 std::auto_ptr

    c++指针基础

    非常基础的指针介绍,个人觉得挺不错的,适合初学者..不是很长,但值得推荐..我刚刚阅读完,获益良多...

    C++指针精髓

    要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,通过对复杂类型的介绍,突破C++中指针的知识。

    C++指针及数组应用

    对你的数组和指针有很大帮助,特别是对于新手来收更是不可多得的材料。

    C++数组指针题含答案.doc

    C++数组指针题含答案.doc

    C++ 智能指针

    C++ 智能指针 C++ 智能指针是一种特殊的指针,它可以自动管理动态分配的内存,避免了手动释放内存带来的问题。智能指针的实现是通过模板类 auto_ptr 来实现的。 auto_ptr 类模板的构造函数 ----------------------...

    csdn下载-范磊C++入门到精通_全集下载

    csdn下载-范磊C++入门到精通_全集下载

    指针练习题

    c++指针类练习题及答案, 这些题回来你指针算是入门了。

    CSDN上C/C++文件操作集锦

    我把下过的关于文件操作的资料整理了下,压缩文件里共有3个资料:C++文件操作.pdf、C文件操作函数.docx、C语言文件操作.ppt。每一份都是极好的资料,差的、一般的我都没发。

    C语言指针参数示例

    在不把变量声明为全局变量或成员变量的情况的下,其他函数想要直接修改这个变量就需要传递该变量的指针给这个函数。例如,在main函数中有一个非常复杂的结构体(局部变量),为了代码整洁,将结构体的初始化过程由一...

Global site tag (gtag.js) - Google Analytics