首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >try catch对char**返回值有影响

try catch对char**返回值有影响
EN

Stack Overflow用户
提问于 2013-03-02 01:26:30
回答 2查看 339关注 0票数 1
代码语言:javascript
运行
复制
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块后,它变成了"aa bb”,这是真的。原因和解决方案?

EN

Stack Overflow用户

发布于 2013-03-02 01:41:04

问题1:返回指向本地数组的指针。当函数返回时,它会被销毁,在此之后使用指针会产生未定义的行为。

问题2:显式内存管理,并用指向字符串文字的指针覆盖指向已分配内存的指针。您分配的内存是泄漏的;如果您试图修改文字,您将得到更多未定义的行为。

假设你写的是C++,而不是C,下面的代码可以解决这两个问题:

代码语言:javascript
运行
复制
std::vector<std::string> test() {return {"aa", "bb"};}
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15163393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档