void fun1(char* p1)
{
p1 = (char*)malloc(100);
}
void fun2()
{
char* p2 = nullptr;
fun1(p2);
strcpy(p2, "大風起兮云飛揚");
printf(p2);
}
int main()
{
fun2();
return 0;
}
uj5u.com熱心網友回復:
肯定會crash的,有兩種改法
第一種:
void fun1(char*& p1)
第二種
void fun1(char* *p1)
uj5u.com熱心網友回復:
崩潰,改了形參的指標值,但是沒有改實參的指標值,對nullptr賦值就崩潰了uj5u.com熱心網友回復:
請參考注解:void fun1(char* p1)
{
p1 = (char*)malloc(100); // 此處會發生記憶體泄漏, 另外, 引數變數p1相當于是區域變數, 因此不會輸出
}
void fun2()
{
char* p2 = nullptr;
fun1(p2); // 執行完這個函式之后, p2依然指向nullptr
strcpy(p2, "大風起兮云飛揚"); // 對nullptr的地址做字串copy, 于是crash
printf(p2); // crash已經發生, 此時p2地址依然是指向nullptr
}
int main()
{
fun2();
return 0;
}
=================================================================================
正確的修改如下:
void fun1(char** p1) // 為了輸出地址, 需要用到二級指標
{
*p1 = (char*)malloc(100); // 加*才是將malloc的地址保存指向地址
}
void fun2()
{
char* p2 = nullptr;
fun1(&p2); // 把保存地址的地址作為引數傳遞
strcpy(p2, "大風起兮云飛揚");
printf(p2);
free(p2); // 為了防止記憶體泄漏, 這里需要free的, 請養成好的coding習慣哦.
}
int main()
{
fun2();
return 0;
}
uj5u.com熱心網友回復:
你這種行為呢,就類似于現實中的,車水馬龍的十字路口闖紅燈。一次沒被撞死,兩次沒被撞死,就認為闖紅燈是安全的.萬事都有其規則,雖然偶爾不守規則不會一定受到懲罰,但是不能認為不守規則是天經地義的
uj5u.com熱心網友回復:
看上去好像是說:一個虛指標被分配了地址空間,于是出錯了;如果只宣告指標2,而不賦值為nullptr,那么還會出錯么?uj5u.com熱心網友回復:
這不該是編譯錯誤嗎uj5u.com熱心網友回復:
本質上 C 是 “值傳遞”char* p1 是 p1 指向的 串的地址
char** p1是 p1 本身的 地址
uj5u.com熱心網友回復:
???????uj5u.com熱心網友回復:
請參考《C++中函式引數型別為指標的指標》希望能夠幫到你!
uj5u.com熱心網友回復:
本質上 C 是 “值傳遞”char* p1 是 p1 指向的 串的地址 // “值傳遞”
char** p1是 p1 本身的 地址 // “值傳遞”
uj5u.com熱心網友回復:
二樓Simple-Soft正解uj5u.com熱心網友回復:
我是小白,蹲大神uj5u.com熱心網友回復:
字串的東西 為什么不用string型別呢?
uj5u.com熱心網友回復:
會出現的情況如二樓與四樓所述,但最根本我還是建議你搞清楚傳值,傳指標與傳參考的區別
這對你自己寫程式也會有很大的幫助,以后遇到傳參的問題也能很快定位
uj5u.com熱心網友回復:
學習了,好像記得記憶體中分幾個區,有的回傳后就已經不可預測了uj5u.com熱心網友回復:
學習學習 不雪都后退了uj5u.com熱心網友回復:
一般在此類一定是func(char **p) 或者func(char *&p)uj5u.com熱心網友回復:
編譯出錯了,再看看uj5u.com熱心網友回復:
學習了學習了uj5u.com熱心網友回復:
學習了,大佬就是大佬uj5u.com熱心網友回復:
本質上 C 是 “值傳遞”char* p1 是 p1 指向的 串的地址
char** p1是 p1 本身的 地址
uj5u.com熱心網友回復:
好好學習吧!!!!!!!!uj5u.com熱心網友回復:
實參與形參的關系是單向值傳遞uj5u.com熱心網友回復:
123
uj5u.com熱心網友回復:
努力學習C++!!uj5u.com熱心網友回復:
學到了學到了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/58183.html
標籤:C++ 語言
