C/C++ 指针做参数 堆内存分配

转载 2015年11月19日 16:27:22

from http://blog.csdn.net/peng825223208/article/details/47983767\

1、指针参数分配堆内存问题

void GetMemory(char *p,int num)
{
	p = new char[num];


}


int _tmain(int argc, _TCHAR* argv[])
{
	char *str = NULL;
	GetMemory(str,100);
	strcpy(str,"hello");
}

注意:像以上程序的分配方法是有问题的,程序运行结果str仍然为NULL,而且程序运行一次会产生一次内存泄露。

原因:问题出在函数GetMemery()函数中,编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p。如果函数日内的程序修改了

_p指向的内容,就导致参数p指向的内容也被做了相应的修改(以为他们指向同一块内存空间)。这就是指针可以做输出参数的原因。但是在本例中

,_p申请了新的内存,只是把_p本身的值改变了,即指向了新的内存空间,但是p本身丝毫没变(即修改了_p本身的值,而不是_p指向的对象)。

所以函数GetMemory()并不能输出任何东西。

办法:如果一旦要用指针参数去申请内存,那么应该使用“指向指针的指针”或”指向指针的引用“或使用返回值的办法。

如下所示:

void GetMemory(char **p,int num)
{
	*p = new char[num];

}

int _tmain(int argc, _TCHAR* argv[])
{
	char *str = NULL;
	GetMemory(&str,100);
	strcpy(str,"hello");
	cout << str << endl;
}


C/C++ 指针做参数 堆内存分配

1、指针参数分配堆内存问题 void GetMemory(char *p,int num) { p = new char[num]; } int _tmain(int argc, _TCHA...
  • peng825223208
  • peng825223208
  • 2015年08月25日 21:27
  • 736

指针作为函数参数在C/C++中调试和探讨

通过一道码农常遇到的问题但是并未去深入分析过的问题,一步一步的调试跟踪截图来分析,问题出在哪里,怎么解决和理解,来帮助消化知识点:函数传值和传指针的相同。函数传递时仅仅是传递的值。借用一位网友的总结:...
  • liquanhai
  • liquanhai
  • 2014年01月27日 17:10
  • 3298

指针数组&数组指针的分配内存及函数参数 C语言版

最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有...
  • WSRspirit
  • WSRspirit
  • 2016年04月29日 20:20
  • 3174

C++堆内存分配

C++堆内存分配C堆内存分配 抽象与分层 如何扩展有效堆内存 brk和sbrk系统调用 如何维护有效堆内存 operator new抽象与分层​ c和c++的内存服务模型与计算机网络里面的协议分层...
  • unclerunning
  • unclerunning
  • 2017年03月30日 08:42
  • 818

c++五种内存分配、堆与栈区别

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。    栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函...
  • mfreesky
  • mfreesky
  • 2008年03月26日 10:44
  • 3896

c/c++中怎样为指向指针的指针分配空间

int **p=(int**)malloc(sizeof(int*)*3);     for(int i=0;i     {       *(p+i)=(int *)malloc(sizeof(...
  • zhangyulin54321
  • zhangyulin54321
  • 2012年08月24日 20:33
  • 2724

函数参数的传递问题(指针的指针)【想在函数中分配内存】(指针做参数,即可做输入参数也可做输出参数)

函数参数的传递问题(指针的指针)(转) 参考:函数参数 指针的指针 百度 函数参数的传递问题(指针的指针)(转) 程序1: vo...
  • haiross
  • haiross
  • 2016年03月02日 13:54
  • 3569

双重指针做参数传递

今天话了点时间想了一下用双重指针做参数传递的问题,以前一直只知道用,没有细想过为什么,今天正好有点xian。   #include"stdio.h" void fun(char * pa) ...
  • g200407331
  • g200407331
  • 2016年11月08日 20:24
  • 482

c 数组做为形参时 该参数退化为指针

c 数组做为形参时 如何求其长度
  • xiewenbo
  • xiewenbo
  • 2014年06月25日 10:29
  • 1917

c/c++中指针参数如何传递内存

c/c++中指针参数如何传递内存来自林锐的《高质量c++编程指南》指针参数是如何传递内存的?       7-4-1Test数的语句GetMemory(str, 200)并没有使str获得期望的内存,...
  • wangjiwei2010
  • wangjiwei2010
  • 2007年04月05日 11:24
  • 876
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C/C++ 指针做参数 堆内存分配
举报原因:
原因补充:

(最多只允许输入30个字)