Program Language/C & C++

[C++] shared_ptr의 잘못된 사용

야곰야곰+책벌레 2022. 7. 27. 19:29
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
반응형