C++ 内存释放c++;
我使用C++ 内存释放c++;,c++,pointers,reference,C++,Pointers,Reference,我使用删除显然误解了某些内容。 为什么这个程序填满了我的记忆 void f(int* x){ x = new int[42]; } int main(){ while(true){ int* x; f(x); delete[] x; } return 0; } 如何从main函数中释放在f中分配的内存?通过引用传递参数。您通过值传递它。您实际上没有修改外部函数中的x变量。 为此,您必须依赖f的返回值: int*
删除显然误解了某些内容。
为什么这个程序填满了我的记忆
void f(int* x){
x = new int[42];
}
int main(){
while(true){
int* x;
f(x);
delete[] x;
}
return 0;
}
如何从main
函数中释放在f
中分配的内存?通过引用传递参数。您通过值传递它。您实际上没有修改外部函数中的x
变量。
为此,您必须依赖f
的返回值:
int* f(){
return new int[42];
}
int main(){
while(true){
int* x = f();
delete[] x;
}
return 0;
}
void f(int** x){
*x = new int[42];
}
int main(){
while(true){
int* x;
f(&x);
delete[] x;
}
return 0;
}
或通过引用传递变量x
:
void f(int*& x){
x = new int[42];
}
int main(){
while(true){
int* x;
f(x);
delete[] x;
}
return 0;
}
或者使用指向指针的指针作为f
的参数:
int* f(){
return new int[42];
}
int main(){
while(true){
int* x = f();
delete[] x;
}
return 0;
}
void f(int** x){
*x = new int[42];
}
int main(){
while(true){
int* x;
f(&x);
delete[] x;
}
return 0;
}
等等…函数中存在内存泄漏
void f(int* x){
x = new int[42];
}
分配内存,但从不释放内存。函数参数是函数的局部变量。该函数处理原始指针的副本。副本的任何更改都不会影响原始参数
并且,由于指针x
未初始化,因此程序具有未定义的行为
int main(){
while(true){
int* x;
^^^^^^
f(x);
delete[] x;
}
return 0;
}
您需要通过引用传递原始指针。因此,函数的定义如下
void f(int* &x){
x = new int[42];
}
void f(int* *x){
*x = new int[42];
}
打电话给我
f(x);
f( &x );
或者定义为
void f(int* &x){
x = new int[42];
}
void f(int* *x){
*x = new int[42];
}
打电话给我
f(x);
f( &x );
<>你想做的是考虑构造一个使用RaII…/P>的函子/类/结构
我指的是标准库如何处理大量分配
struct A {
A(){/*allocate mem*/}
~A(){/*deallocate mem*/}
}
为了你的特殊功能
void f(int** x);
很可能是你想要的签名。这将允许您通过指向数组的指针修改数组。虽然。。。我仍然建议不要这样做。。。原因是,如果您决定分配一组数组,该怎么办?main方法是否负责释放内存