c++ - 通过传递的指针段错误初始化 char 数组

标签 c++ arrays

即,为什么以下工作:

    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/

相关文章:

c++ - glm::quat 为什么 x,y,z,w 分量的顺序是混合的

c++ - C++ 的 SFML 错误,未找到入口点

javascript - 访问存储在数组中的未知名称对象中的值 (JavaScript)

c++ - std::list.unique() 应该使迭代器无效吗?

c++ - CString数组排序

c++ - BerkeleyDB 并发

c - 如何确定 C 数组中的元素是否尚未分配给任何东西?

c - C 中的二维数组指针

javascript - 配对号码,必须一次配对一个,不能与自己或小组成员配对

java - 使用 BufferedReader 读取数组?