程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved