cgr939923423 2016-11-14 04:29 采纳率: 0%
浏览 884
已采纳

求问c++问题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include
using namespace std;
void change(char **a)
{
char *p = "world";
*a = p;
}
void main()
{
using namespace std;
char a[] = "asd";
char *p = a;
change(&p);
cout << p << endl;
system("pause");
}

调用的函数 意思是把主函数里p指针的指向改成函数里"world"的地址,但函数调用结束内存释放外部p不就成野指针了么,为什么还能输出world.

  • 写回答

3条回答

  • 英格瓦 2016-11-14 04:55
    关注
    char *p = "world";
    *a = p;
    

    问题就在这两句,p虽然是一个局部变量,但world"由于是一个字符串常量,所以最后*a实际是执行内存里面的常量区,在change函数结束后,
    这片区域并不会被释放或覆盖。所以最后还是能打印出world(上面的函数编译的时候会有警告)。如果上面的两句改成这样就出问题了:

    char p[] = "world";
    *a = p;
    

    估计这才是你担心的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?