【c/c++】function returns address of local variable

這個問題很普通,也很常見,例如下面的代碼就會報這個錯,原因在於:
s是局部變量,在棧上分配空間,當函數結束後會回收空間,這樣s返回的內容無效。
解決方法是在堆上申請空間,然後返回,但是這樣做需要注意釋放空間。

char* func() {
    char s[100];
    strcpy(s, "hello");
    return s;
}

int main(int argc, char **argv) {
    puts(func());
    return 0;
}
char* func() {
    char *s = malloc(100);
    strcpy(s, "hello");
    return s;
}

int main(int argc, char **argv) {
    puts(func());
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章