c++ 指针和引用传递

来源:互联网 发布:linux查看python版本 编辑:程序博客网 时间:2024/05/16 19:56

别人的程序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; // okvf2=*(new vector<int>());delete &vf2; // corereturn 0;}