다음 코드에서 New를 사용하여 Set를 만드는 데 사용 된 동적 메모리를 할당 해제하려고합니다. 내가 삭제하려고하면 SET의 노드.NEW/Delete Heap Corruption Detected : CRT가 힙 버퍼가 끝난 후 응용 프로그램이 메모리에 쓴 것을 감지했습니다.
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main()
{
std::set<char *> myset;
std::set<char *>::iterator it;
char *l_ptr1, *l_ptr2;
std::cout <<"Before Insertion::Address of myset " << &myset<<endl;
//l_ptr1 = (char*)malloc(256*sizeof(char*));
//l_ptr2 = (char*)malloc(256*sizeof(char*));
l_ptr1 = new char(256);
l_ptr2 = new char(256);
printf("Before Insertion ::Address of l_ptr1 %x\n", l_ptr1);
printf("Before Insertion ::Address of l_ptr2 %x\n", l_ptr2);
std::cin>>l_ptr1;
myset.insert(l_ptr1);
std::cin>>l_ptr2;
myset.insert(l_ptr2);
std::cout <<"After Insertion::Address of myset " << &myset<<endl;
std::cout << "Myset Contains :: Value and It's Address "<<endl;
it = myset.begin();
std::cout<<*it<<"\t"<<&(*it)<<endl; ++it;
std::cout<<*it<<"\t"<<&(*it)<<endl;
std::cout << endl;
it = myset.begin();
myset.erase(it++);
std::cout <<"After First Node Deletion ::Address of myset " << &myset<<endl;
std::cout <<"Before free(l_ptr1) :: l_ptr1:: " <<l_ptr1 <<endl;
//free(l_ptr1);
delete[] l_ptr1;
std::cout <<"After free(l_ptr1) :: l_ptr1:: " <<l_ptr1 <<endl;
myset.erase(it);
std::cout <<"After Second Node Deletion ::Address of myset " << &myset<<endl;
std::cout <<"Before free(l_ptr2) :: l_ptr2:: " <<l_ptr2 <<endl;
//free(l_ptr2);
delete[] l_ptr2;
std::cout <<"After free(l_ptr2) :: l_ptr2:: " <<l_ptr2 <<endl;
printf("After All Node Deletion ::Address of l_ptr1 %x\n", l_ptr1);
printf("After All Node Deletion ::Address of l_ptr2 %x\n", l_ptr2);
return 0;
}
다음 오류가 발생합니다.
힙 손상 감지 : 0x005B5380의 일반 블록 (# 150) 이후. CRT 응용 프로그램이 힙 버퍼 종료 후 메모리에 쓴 것으로 감지되었습니다.
'new char (256);'->'새로운 char [256];','printf' 형식도 고쳐야합니다. ** **에서 컴파일러 경고를 켭니다. – user657267