`
BruceXX
  • 浏览: 141477 次
  • 性别: 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++指针基础是c++编程语言中最基本也是最重要的概念之一。指针是c++编程语言中的一种数据类型,它可以存储内存中的地址,并且可以通过指针来访问和操作内存中的数据。 在c++编程语言中,指针是通过星...

    c++中指针的详细介绍

    4. **数组与指针**:在C++中,数组名实际上是一个指向其首元素的指针,因此指针可以用来遍历数组。 四、动态内存管理 指针在动态内存管理中扮演关键角色。使用`new`运算符可以动态分配内存,并返回分配内存的起始...

    C++函数的指针

    在C++编程语言中,函数的指针是一个非常强大的特性,它允许我们将函数作为一个值来处理,例如存储、传递和调用。这个概念是面向过程编程中的一个关键元素,尤其在设计模式如策略模式或者回调函数中发挥着重要作用。...

    C++指针精髓

    ### C++指针精髓 #### 一、理解复杂类型的规则 在C++中,指针是一种非常重要的数据类型,能够帮助程序员直接操作内存。然而,随着指针类型的复杂度增加,理解它们的意义变得越来越困难。为了更好地掌握这些复杂的...

    C++指针及数组应用

    C++指针及数组应用 C++中的指针类型是一个非常重要的概念,它是C++语言的基础之一。指针类型可以分为两种:静态指针和动态指针。静态指针是指在编译时就确定了内存地址的指针,而动态指针是指在运行时才确定了内存...

    C和C++指针

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

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

    * 不要将 this 指针作为 shared_ptr 返回出来,因为 this 指针本质上是一个裸指针,可能会导致重复析构。 2. unique_ptr(独占智能指针) unique_ptr 是一种独占智能指针,保证只有一个指针指向对象,不能被复制,...

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

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

    c++智能指针的实现

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

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

    "学生成绩管理系统c++ csdn" 本资源是关于学生成绩管理系统的设计和实现,使用C++语言,面向对象程序设计的方法来完成系统的设计和开发。系统的主要功能包括查询、检索和删除功能,并且能够打开或修改指定文件及将...

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

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

    C++ 智能指针

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

    小熊猫devc++下载包

    小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小熊猫devc++下载包小...

    C++指针和引用

    针对不会指针和指针引用的,有帮助,浅显易懂

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

    根据给定的文件信息,我们可以总结出这是一套关于C++编程语言的教程,由范磊教授,旨在从入门到精通的全方位学习。虽然提供的链接指向的是早期Flash格式的视频教程,我们依然可以从链接的标题中提取出重要的知识点,...

    C语言指针参数示例

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

    Professional C++

    《Professional C++》是一本深度探讨C++编程语言的专业书籍,旨在帮助读者全面掌握C++的高级特性和最佳实践。本书涵盖了从基础语法到高级模板技术,从对象模型到内存管理,从STL到设计模式等多个方面,是C++开发者...

    C++实现指针式时钟Sample

    《指针式时钟》问题分析,功能分析 (1)正确显示系统时钟; (2)能准确定位时钟刻度和时分秒针的位置; (3)能随窗口大小的变化而变化。 运行效果图:http://blog.csdn.net/dxzysk/article/details/9904461

    D指针/Q指针在C++中的使用(配合本人同名博客使用)

    在C++编程中,D指针(Derived Pointer)和Q指针(Qualified Pointer)是两种特殊的指针用法,它们在处理继承和多态性时起到关键作用。本资源可能包含了一个名为"SpaceModel"的文件,这可能是作者用于演示或实例化D...

Global site tag (gtag.js) - Google Analytics