[질문] C++ / Heap 깨짐
연파랑
안녕하세요. 우연치 않게 힙이 깨지는 오류를 발견했는데요
변수에 new를 해서 메모리를 할당한 후
delete를 한 뒤에는 그 해당 변수에 값을 넣으면 올바른 표현이 아니란것은
모두 아실거라 생각됩니다.
우선, 아래의 코드를 우선 봐주시기 바랍니다. ㅠㅠ
----------------------------------------------------std::vectorint* vecInt;
for(int a = 0; a != 3; a++ )
{
for(int a = 0; a != 3; a++ )
{
int* pi = new int;
*pi = a + 100;
vecInt.push_back(pi);
}
std::vectorint*::iterator itr = vecInt.begin();
while(vecInt.end() != itr)
{
std::vectorint*::value_type pi = (*itr);
if(pi)
{
delete pi; // -첫번째, 두번째 루프에서는 문제 없음. 세번째 루프에서 힙이 깨짐
*pi = 0;// - 잘못된 표현
//pi = NULL;
}
++itr;
}
std::vectorint*().swap(vecInt);
----------------------------------------------------
잘못된 표현을 일부로 기입했는데요
왜 꼭 마지막에서
delete pi에서힙이 깨질까요? ㅠㅠ
고수님들의 많은 도움 부탁드립니다.~