C++在函数中分配动态内存 - 新手问题

10 c++ memory pointers function dynamic

我正在调查内存泄漏,从我看到的,问题看起来像这样:

int main(){
    char *cp = 0;
    func(cp);
    //code
    delete[] cp;
}

void func(char *cp){
    cp = new char[100];
}
Run Code Online (Sandbox Code Playgroud)

在//代码注释中,我希望cp指向已分配的内存,但它仍然是一个空指针,这意味着我永远不会删除内存.我在做什么呢?

GMa*_*ckG 18

您正在分配cp已分配内存的值.但是,这是堆栈中的变量:cp主要的副本!cp是您所在职能的本地化.

你想要的是一个参考:

void func(char *& cp)
Run Code Online (Sandbox Code Playgroud)

这将别名cp为传入的参数.


And*_*ena 13

void func(char *cp){
    cp = new char[100];
}
Run Code Online (Sandbox Code Playgroud)

在这个函数中,char*cp是" 通过复制传递的指针 ",这意味着它们指向相同的内存地址,但它们不是同一个指针.当您更改内部指针,使其指向其他位置时,已传递的原始指针将始终指向0.


小智 6

参数cp是函数的局部变量 - 更改它不会改变函数外的任何内容.编写函数的更好方法是:

char * func(){
    return new char[100];
}
Run Code Online (Sandbox Code Playgroud)

而不是直接处理你的问题,但你可能应该使用std :: string和std :: vector而不是动态分配的数组.