C++ 整数内存分配/释放
获取以下错误: malloc:**对象0x7ffee85b4338的错误:未分配要释放的指针 我认为我的分配和解除分配是正确的,但我一定没有。我做错了什么?它将编译为零错误和零警告,但不会在释放内存后打印最后一条语句(COMPLETE) 请参阅下面的源代码。感谢您的帮助C++ 整数内存分配/释放,c++,memory,memory-management,allocation,C++,Memory,Memory Management,Allocation,获取以下错误: malloc:**对象0x7ffee85b4338的错误:未分配要释放的指针 我认为我的分配和解除分配是正确的,但我一定没有。我做错了什么?它将编译为零错误和零警告,但不会在释放内存后打印最后一条语句(COMPLETE) 请参阅下面的源代码。感谢您的帮助 #include <iostream> using namespace std; int main(){ int numOne, numTwo, numThree; cout <<
#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;
}
#包括
使用名称空间std;
int main(){
内努蒙、努姆托、努姆特里;
不能数二;
cout>numThree;
//打印出存储在变量中的用户输入的数字
cout您可以将用户的输入存储到指针变量中,并为其分配内存,然后使用指针操作其值:
int *numOne, *numTwo, *numThree;
numOne = new int;
numTwo = new int;
numThree = new int;
int *pointerOne, *pointerTwo, *pointerThree;
pointerOne = numOne;
pointerTwo = numTwo;
pointerThree = numThree;
cout << "\nEnter a number: ";
cin >> *numOne; // You can use cin >> *pointerOne;
cout << "Enter another number: ";
cin >> *numTwo; // You can use cin >> *pointerTwo;
cout << "Enter a third number: ";
cin >> *numThree; // You can use cin >> *pointerThree;
cout << "\nNOTICE: Incrementing entered values by one! ";
*pointerOne++;
*pointerTwo++;
*pointerThree++;
cout << "....COMPLETE!" << endl;
delete numOne;
delete numTwo;
delete numThree;
int*numOne、*numTwo、*numThree;
努蒙=新整数;
numTwo=新整数;
numThree=新整数;
int*pointerOne、*pointerTwo、*pointerThree;
点酮=numOne;
指针two=numTwo;
指针三=numThree;
cout>*numOne;//您可以使用cin>>*pointerOne;
cout>*numTwo;//您可以使用cin>>*pointertw;
cout>*numThree;//您可以使用cin>>*pointerThree;
coutpointerOne=&numOne;
makespointerOne
指向numOne
。它不再指向您以前创建的无名的new int
。只要不new
或delete
,您的代码就应该很好了。我的项目是使用new和delete操作符来学习管理内存。所以我不是I don’我不确定我需要做什么才能使它正确。我的项目是使用new和delete操作符来学习管理内存。--你学习管理内存的方法是知道何时不使用new
和delete
,而不是以奇怪和迂回的方式使用new/delete
。@HashimGari你要么想使用>numXXX
位于堆栈上的局部变量,或者使用指向已分配动态内存的指针xxx
。如果您写入pointerOne=new Int;pointerOne=&numOne
您分配了一个Int
,将其地址存储在指针中,然后用localnumOne
的地址覆盖它。因此您丢失了地址到动态整数并且将来无法删除它=内存泄漏。并且永远不要对未从new
返回的地址调用delete
。因此我不确定我需要做什么。我的目标是将整数存储到三个不同的变量中,创建三个指针指向每个值,同时显示变量和指针使用new和delete操作符…谢谢!这是我因为某种原因没有在脑海中点击的。立即创建一个变量并为该变量分配内存!非常感谢!