c++ 指针和引用传递

别人的程序core了,segv_maperr。查了一下是内存释放的有问题。就如同下面的代码

#include <stdio.h>
#include <stdlib.h>
void FreeMsgBuffer( char* msg)
{
	if (NULL != msg)
	{
		free(msg);
		msg = NULL;
	}
}
int  main(void)
{
	char *pszTmp;
	pszTmp = NULL;
	pszTmp = (char *)malloc(sizeof(char) * 10);
	strcpy(pszTmp, "leman");
	printf("name: %s\n", pszTmp);
	FreeMsgBuffer(pszTmp);
	if (pszTmp == NULL)
	{
		printf("已释放\n");
		//其他操作
	}
	else
	{
		printf("内存内容: %s\n", pszTmp);
		//其他操作
	}
	return 0;
}
这个问题之前已经考虑过,就是向函数传递指针的时候可以通过间接访问改变指针指向的内容而不会改变实参指针本身(所以说传递指针实际上是值传递)。

问题的解决办法也很简单,传递一个引用就可以了。

void FreeMsgBuffer( char* &msg)
函数是可以改变实参引用本身的,这才是真正的引用传递。

实验中发现自己对引用的理解还不够,比如下面的代码在delete处会core。我现在不能解释为什么,留给以后再学习。

int main()
{
	vector<int> v(100,0);
	vector<int>&vf1=*(new vector<int>());
	vector<int>&vf2=v;

	delete &vf1; // ok
	vf2=*(new vector<int>());
	delete &vf2; // core
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值