728x90
반응형
smart_ptr를 익히고 나서 꾸준히 unique_ptr와 shared_ptr를 사용하였다. 그 후 프로그램을 종료할 때마다 메모리 액세스 에러가 자주 일어났다. 자동으로 메모리를 해제해 준다고 하여 스마트 포인트를 사용하였는데 오히려 문제가 더 생겼다.
shared_ptr의 경우 소멸될 때 아무도 사용하고 있지 않다면 메모리를 자동으로 해제해 준다.
하지만 참조자로 받아서 shared_ptr로 변경해서 사용한다면 메모리를 두 번 해제하는 경우가 발생한다.
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
void printf(string* ptext)
{
shared_ptr<string> shrd_text(ptext);
cout << shrd_text->c_str() << endl;
}
int main()
{
string text("shared_ptr test!!");
printf(&text);
return 0;
}
text는 지역 변수로 선언되어 있는데, 함수로 들어갈 때 shared_ptr로 씌워주면 text는 두 번 메모리 해제를 시도 하게 된다. 그렇기 때문에 자연스럽게 메모리 액세스 에러가 발생하는 것이다.
정확한 이해 없이 그저 좋다고 무분별하게 사용하다보니 이런 에러를 만나게 됐다.
728x90
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] unary_function, binary_function (0) | 2022.08.12 |
---|---|
[C++] string 공백 문자 제거 (0) | 2022.08.02 |
[C++] 디버깅 모드 종료 시 메시지 (0) | 2022.07.27 |
[C++] Dll Unloading 시 Kernel32.dll 에러 (0) | 2022.07.26 |
[C++] 자료형 타입 확인하기 (0) | 2022.07.14 |