gpt4 book ai didi

c++ - try catch 对 char** 返回值有影响

转载 作者:行者123 更新时间:2023-11-30 02:56:50 25 4
gpt4 key购买 nike

char **test()
{
char *a[3];
a[0] = (char *) malloc(sizeof(char) *3);
a[1] = (char *) malloc(sizeof(char) *3);
a[0] = "aa";
a[1] = "bb";
return a;
}

//main
try{
char ** a;
a = test();
cout << a[0] << " " << a[1];
}
catch(std::exception){}

在vs2008编译,这个程序没有输出“bb”,但是我去掉try catch block 后,结果是“aa bb”,没错。原因及解决方法?

最佳答案

这个程序有未定义的行为,因为你正在返回一个指向本地的指针。您需要使用 malloc 分配 a 数组才能解决问题:

char **test() {
char **a = (char**)malloc(sizeof(char*) * 2);
a[0] = (char *) malloc(sizeof(char) *3);
a[1] = (char *) malloc(sizeof(char) *3);
strcpy(a[0], "aa");
strcpy(a[1], "bb");
return a;
}

当然,现在您完全有责任释放 main 中的所有 malloc 内存,以避免内存泄漏(您已经为此承担了责任您的实现;现在您只需将第三个 free 添加到调用方即可。

您看到的差异很可能是由于使用和不使用 try/catch block 时堆栈管理的差异。似乎没有 try/catch 本地数据仍然可供您打印,即使在 返回后引用它不再合法>test() 函数。

关于c++ - try catch 对 char** 返回值有影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15163393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com