別人的程序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;
}