当前位置:编程学习 > C/C++ >>

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;
}

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,