我在使用new
anddelete
运算符时遇到了一个小问题。我在很多地方读到每个new
运算符都必须与 a 相对应delete
,据我所知,使用创建的变量new
将持续存在,直到它们被 that 击中delete
。如果你想看看下面的代码,它很长但很简单:
#include <iostream>
using namespace std;
int* testFunction1();
int* testFunction2();
int main(){
int* ptr1 = testFunction1();
int* ptr2 = testFunction2();
cout << *ptr1 << endl; // outputs 5
cout << *(ptr1 - 1) << endl; // outputs random int
cout << *ptr2 << endl; // outputs random int
cout << ptr1 << endl; //prints address of b from testFunction1()
cout << ptr1 - 1 << endl; // prints address of a and c from testFunction1()
cout << ptr2 << endl; // prints address of a and c from testFunction1()
cout << endl;
// delete ptr1; won't work
return 0;
}
int* testFunction1(){
int a = 5, b = 10;
int* pointerToInt1 = new int;
pointerToInt1 = &a;
pointerToInt1 = &b;
cout << &a << endl;
cout << &b << endl;
return pointerToInt1;
}
int* testFunction2(){
int c = 5;
int* pointerToInt2 = &c;
cout << &c << endl;
return pointerToInt2;
}
我有两个问题:
我认为
testFunction1()
,我正在按值返回指针。但我不知道如何解决这个问题,返回对指针的引用,以便我可以在 main 方法(或任何其他方法)中释放内存。为什么我在取消引用时得到 5 作为输出
*ptr1
?我的意思是,从地址输出中,很明显分配给c
in的值testFunction2()
存储在那里,但为什么会发生这种情况呢?