Я использую delete
для удаления объекта, созданного с помощью new []
. Это неопределенное поведение. Но почему в следующей программе эта операция приводит к другому результату? Во втором случае - ошибка сегментации, а в первом - ничего.GCC: ошибка сегментации при использовании delete
class A {
public:
A() {std::cout << "A::A()" << std::endl;}
~A() {std::cout << "A::~A()" <<std::endl;}
};
int main() {
//1:
char* pc = new char[5];
delete pc; //OK
//2:
A* pa = new A[5];
delete pa; //Segmentation fault
return 0;
}
Это должно быть 'delete [] pa', потому что вы намерены удалить массив *. –
'A * pc = new char [5];' не следует компилировать ... – Jarod42