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而不是动态分配的数组.