Мой код компилируется как таковой, но я не могу понять, почему я продолжаю получать эту ошибку, которая говорит мне, что «Отладка Утверждения Сбой». Почему это?
#include <iostream>
using namespace std;
struct Bag
{
int k;
};int main ()
{
int *p1;
int *p2;
char p3;
//k = 100; // Assigns variable of type bag to 100
p1 = new int; // Variables created using the new operator are called dynamic variables
p2 = new int;*p1 = 30;
*p2 = 50;
p3 = 'K';
*p1 = *p1 + *p2;
p1 = p2;
cout << "The sum of the two pointers is = " << *p1 << endl;
delete p1;
delete p2; // Delete the dynamic variable p1 and return the memory occupied by p1 to the freestore to be reused.
system ("Pause");
return 0;
}
Я предполагаю, что вы получаете Отладочное Утверждение Сбой на этой строке:
delete p2;
Проблема здесь в том, что вы устанавливаете «p1 = p2», поэтому оба указателя указывают на область памяти, содержащую целое число «50». После этого вы удаляете указатель p1, что означает UN-выделение области памяти, содержащей целое число «50».
В этот момент p2 не определено, и попытка удалить его приведет к ошибке проверки отладки.
Других решений пока нет …