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”,这是真的。原因和解决方案?
发布于 2013-03-02 01:41:04
问题1:返回指向本地数组的指针。当函数返回时,它会被销毁,在此之后使用指针会产生未定义的行为。
问题2:显式内存管理,并用指向字符串文字的指针覆盖指向已分配内存的指针。您分配的内存是泄漏的;如果您试图修改文字,您将得到更多未定义的行为。
假设你写的是C++,而不是C,下面的代码可以解决这两个问题:
std::vector<std::string> test() {return {"aa", "bb"};}https://stackoverflow.com/questions/15163393
复制相似问题