即,为什么以下工作:
char* char_array(size_t size){
return new char[size];
}
int main(){
const char* foo = "foo";
size_t len = strlen(foo);
char* bar=char_array(len);
memset(bar, 0, len+1);
}
但是下面的段错误:
void char_array(char* out, size_t size){
out= new char[size];
}
int main(){
const char* foo = "foo";
size_t len = strlen(foo);
char* bar;
char_array(bar, len);
memset(bar, 0, len+1);
}
最佳答案
将“bar”传递给 char_array 是在调用时传递该指针的当前值的拷贝 - 因此 char_array 中的“out”指向与“bar”相同的东西,但是它们是完全独立的变量,当 char_array 返回时,新分配的值就会丢失。
如果你想真正修改'bar'变量,你需要传递一个指针或对bar变量本身的引用,即
void char_array(char** out, size_t size) {
*out = new char[size];
}
...
char_array(&bar, len);
或
void char_array(char*& out, size_t size) {
out = new char[size];
}
...
char_array(bar, len);
...
关于c++ - 通过传递的指针段错误初始化 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972861/