`
xu_java
  • 浏览: 863 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

C 指针的常见题 函数传参时的内存泄露

阅读更多
#include <iostream>

using namespace std;

void test(int* p)//void test(int* &p)
{
	cout<<"In the function;from main"<<endl;

	cout<<"Where is the p"<<endl;
	cout<<&p<<endl;

	cout<<"What's the p point to"<<endl;
	cout<<p<<endl;
	
	cout<<"p=new int[10]"<<endl;
	cout<<"What's the p point to now"<<endl;
	p=new int[10];
	cout<<p<<endl;

	cout<<"And the location of p is unchanged"<<endl;
	cout<<&p<<endl;
	cout<<"Out of the function ;return to main"<<endl;


}

int main()
{
	int *p=NULL;
	cout<<"Where is the p"<<endl;
	cout<<&p<<endl;

	cout<<"What's the p point to"<<endl;
	cout<<p<<endl;

	test(p);

	cout<<"What's the p point to now"<<endl;
	cout<<p<<endl;

	return 0;
}




Where is the p
0012FF28
What's the p point to
00000000
In the function;from main
Where is the p
0012FE54
What's the p point to
00000000
p=new int[10]
What's the p point to now
001E1AD0
And the location of p is unchanged
0012FE54
Out of the function ;return to main
What's the p point to now
00000000
请按任意键继续. . .


小结:
指针归根到底也是一个值,存放在栈中,有他自己的位置,他的值是指向内存的地址的。
就像这段代码,函数test的形参一开始指向的内存地址是main函数中p指向的地址。
至此,main函数中的p在test函数中没什么作用了,而test函数的作用仅仅是为形参p开辟空间,造成内存泄露。
分享到:
评论

相关推荐

    拷贝构造函数导致指针挂起的研究

    此问题在C++编程中较为常见,特别是在类中包含指针成员变量时更为显著。 ### 拷贝构造函数导致指针挂起的研究 #### 1. 拷贝构造函数简介 在C++中,拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,使其...

    C语言中传值与传指针的介绍与区别

    在C语言中,函数参数的传递主要有两种方式:传值(Pass by ...传指针则提供了修改实参的能力,但需要小心处理指针,防止出现悬挂指针或内存泄漏等问题。理解这两者的区别和使用场景,是提升C语言编程技能的关键步骤。

    C语言,指针黑内存操作

    ### C语言中的指针与内存操作 在C语言中,指针是一种非常强大的特性,它允许程序员直接控制和管理内存。对于那些希望深入了解程序底层机制的开发者而言,掌握指针和内存操作至关重要。本篇文章将深入探讨C语言中的...

    指针 指针教程 指针练习

    1. 函数传参:指针可以作为函数参数,允许函数修改实参的值,实现参数的“传递”。 2. 指针数组:可以声明指向数组的指针,如`int (*p)[5];`,`p`是一个指向含有5个整数的数组的指针。 3. 多级指针:可以声明指向...

    函数参数的传递问题(指针的指针)

    在处理指针时,尤其需要注意内存的分配和释放,以防止内存泄漏。以下是对标题和描述中提到的知识点的详细解释: 1. **函数返回值中的指针类型**: - 当函数返回一个指针时,需要清楚地知道这个指针指向的是静态...

    第13讲:深入理解指针(3).pdf

    在学习指针的过程中,还应注意内存管理和指针操作中可能出现的错误,如野指针、内存泄漏等问题,这些错误可能会导致程序运行不稳定或崩溃。因此,合理地使用指针,并在适当的时候释放不再使用的内存,是编程实践中的...

    零起点学通C++多媒体范例教学代码

    14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维数组的初始...

    零起点学通C++学习_多媒体范例教学代码

    14.7.5 函数传参实例五——判断数组排列方式后执行不同的函数 14.8 数组在对象中的传参 14.9 对象数组 14.10 在对象数组中初始化成员变量 14.11 指针数组 14.12 枚举常量与数组 14.13 多维数组 14.14 多维...

    C++程序设计中指针的应用

    本文将深入探讨指针在C++中的几种常见用法,包括与普通变量、数组以及函数相结合时的具体应用场景。 #### 指针基础 指针是一种特殊的变量类型,它可以存储内存地址。在C++中声明一个指针时,需要指定指针所指向的...

    一维指针和二维指针

    本文将深入探讨一维指针和二维指针在函数传参中的应用,以及如何通过它们来改变函数外部的变量或指针本身。 一维指针是一个指向单个变量的指针,它可以用来传递变量的地址到函数,从而在函数内部对这个变量进行修改...

    易语言多线程内存多参传递完全版带案例 支持嵌套调用

    易语言可能采用了智能指针或者其他自动垃圾回收机制,确保了在多线程环境下,内存的分配和释放不会出现冲突,防止了内存泄漏和数据竞争等问题。 此外,资源的描述中还提到了“编译器级别的优化方案”。这意味着在...

    C++常见问题解答(解决一些常见疑问)

    如果基类析构函数不是虚函数,则需要显式调用基类的析构函数以避免资源泄露等问题。 26. **结构和类有什么区别?** - 在C++中,结构体(struct)和类(class)非常相似,主要区别在于默认访问级别不同。结构体的成员...

    指针做形参做局部变量以及内存分配

    指针做形参做局部变量以及内存分配 指针做形参是编程语言中的一种重要概念,它对程序的执行和结果产生重要影响。在C语言中,指针做形参可以分为一级指针和二级指针两种形式。一级指针做形参是指形参是一个指针变量...

    jni传参实例

    但是要注意,这些操作需要遵循Android内存管理的规则,避免内存泄漏。 总结,JNI传参实例展示了如何在Android应用中使用JNI进行跨语言通信,包括定义本地方法、生成和实现JNI接口、编译C++代码以及在Java中调用这些...

    经典企业面试题整理(C语言)

    ### 经典企业面试题整理(C语言)知识点解析 #### C语言关键字数量及特性 - **关键字总数**:C语言包含32个关键字。值得注意的是`sizeof`被视为关键字而非函数,这一特性对于理解编译原理及代码优化具有重要意义。 ...

    易语言DLL参数传递字节集源码

    此外,需要注意内存释放的问题,防止内存泄漏。如果DLL内部分配了新的内存并返回了指针,那么在易语言中调用完DLL后,可能需要释放这部分内存。 5. **错误处理** DLL调用过程中可能会出现各种错误,如DLL未找到、...

    delphi7调用高版本xe的dll字符串传参示例

    避免在DLL中分配内存并在主应用程序中释放,或反之亦然,以免引发内存泄漏或访问冲突。 通过以上步骤,你可以在Delphi 7中成功调用Delphi XE编译的DLL,并传递字符串参数。理解DLL的工作原理、参数类型和跨版本的...

    qt 段错误 解决方案

    在编程领域,"段错误"(Segmentation Fault)是一个常见的运行时错误,通常发生在尝试访问内存空间时,程序试图访问的区域不在其被允许的内存段内。这可能包括访问未初始化的指针、越界数组访问、非法内存释放等。在...

    大作业,项目1

    在你的作业中,要求所有的成员函数传参和返回值都是引用类型,这意味着在调用这些函数时,你不会创建新的对象副本,而是直接修改或访问原有的对象。 动态内存开辟是C++中处理大量数据或复杂数据结构时必不可少的...

    字节后端开发offer持有者模拟面试总结

    3. **常量函数传参的几种方式**: - 值传递:函数接收参数副本,不影响原变量。 - 引用传递:函数接收参数的引用,修改会影响原变量。 - 常量引用传递:函数接收常量引用,不能修改参数值,但可以节省拷贝开销。 ...

Global site tag (gtag.js) - Google Analytics