【发布时间】:2018-09-30 18:03:59
【问题描述】:
得到以下错误:
malloc: *** 对象 0x7ffee85b4338 错误:未分配指针被释放
我以为我正确分配和解除分配,但我一定没有。我做错了什么?它将以零错误和零警告编译,但不会打印出内存释放后的最后一条语句(COMPLETE)。
请参阅下面的源代码。任何帮助表示赞赏。
#include <iostream>
using namespace std;
int main(){
int numOne, numTwo, numThree;
cout << "When prompted please enter a whole number." << endl;
//obtain user input for numbers and store to integer variables
cout << "\nEnter a number: ";
cin >> numOne;
cout << "Enter another number: ";
cin >> numTwo;
cout << "Enter a third number: ";
cin >> numThree;
//print out user's entered numbers as stored in variables
cout<< "\nThe numbers you entered currently stored as variables are: ";
cout << numOne << ", " << numTwo << " and " << numThree << endl;
//create pointers and allocate memory
int* pointerOne = new int;
int* pointerTwo = new int;
int* pointerThree = new int;
//store location of variables to pointers
pointerOne = &numOne;
pointerTwo = &numTwo;
pointerThree = &numThree;
//print out user's entered numbers as stored in pointers
cout<< "The numbers you entered currently stored as pointers are: ";
cout << *pointerOne << ", " << *pointerTwo << " and " << *pointerThree << endl;
//alter user's numbers to show that pointers alter variables
cout << "\nNOTICE: Incrementing entered values by one! ";
*pointerOne = *pointerOne + 1;
*pointerTwo = *pointerTwo + 1;
*pointerThree = *pointerThree + 1;
cout << "....COMPLETE!" << endl;
//print out user's entered numbers as stored in variables
cout<< "\nThe numbers you entered incremented by one shown using variables: ";
cout << numOne << ", " << numTwo << " and " << numThree << endl;
//deallocate memory
cout << "\nWARNING: Deallocating pointer memory! ";
delete pointerOne;
delete pointerTwo;
delete pointerThree;
cout << "....COMPLETE!" << endl;
}
【问题讨论】:
-
pointerOne = &numOne;使pointerOne指向numOne。它不再指向您之前创建的无名new int。只是不要new或delete,你的代码应该没问题。 -
嗯,我的项目是使用 new 和 delete 运算符来学习管理内存。所以我不确定我需要做些什么才能做到这一点。
-
嗯,我的项目是使用 new 和 delete 运算符来学习管理内存。 -- 你通过了解何时和何时来学习管理内存不要使用
new和delete,不要以奇怪和迂回的方式使用new / delete。 -
@HashimGari 您要么想使用位于堆栈上的
numXXX局部变量,要么使用指向分配的动态内存的pointerXXX。如果你写pointerOne=new Int; pointerOne=&numOne,你分配了一个int,将它的地址存储在指针中,然后用本地numOne的地址覆盖它。所以你丢失了动态 int 的地址,以后不能删除它=内存泄漏。并且永远不要在未从new返回的地址上调用delete。 -
所以我不确定我需要做什么。我的目标是将整数存储到三个不同的变量中,创建三个指向每个值的指针,显示变量和指针,同时使用 new 和 delete 运算符....
标签: c++ memory memory-management allocation