Strdup无法在char **中使用多个元素

时间:2015-12-12 22:42:03

标签: c++

我有以下代码 -

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,名字不是。我做错了什么?

1 个答案:

答案 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);
}