我有以下代码 -
char* get_conn(void);
void main(void){
char** data= new char*[2];
data=get_conn();
char* name;
char* ip;
name=strdup(data[0]);
ip=strdup(data[1]);
}
char** get_conn(){
char* mistring[2];
mystring[0]="One thing";
mystring[1]="another thing";
return(mistring);
}
其中get_conn
返回原来为char**
的{{1}}。
问题是,当我调试它时,' name'被复制得很好,但在' ip'我没有得到数据[1]中存储的内容。
如果我改变这样的顺序,
char* mistring[2]
现在正确复制ip,名字不是。我做错了什么?
答案 0 :(得分:0)
char** data= new char*[2];
data=get_conn();
在这里,您有 memory leak 。您分配data
但会立即覆盖get_conn()
返回的值。
另一个问题是你要返回一个局部变量。 mystring
是一个本地数组,其生命周期只是其封闭块(即get_conn()
函数)。所以你不能退货。这导致undefined behaviour。您可以在get_conn()
本身进行分配并将其返回:
const char** get_conn(void);
int main(void){
const char** data;
data=get_conn();
....
}
const char** get_conn(){
const char **mystring = new const char*[2];
mystring[0]="One thing";
mystring[1]="another thing";
return(mystring);
}