본문 바로가기
코딩/C++

[C++] 'std::logic_error' what(): basic_string::_M_construct null not valid 에러 해결하기 +이유

by yenua 2022. 3. 29.
반응형

문제가 발생한 코드는 아래와 같다.

string s = 0;

비어있는 문자열을 만들겠답시고 문자열 자료형을 0으로 초기화를 시켜버렸다.

여기서 0은 NULL을 뜻하는 의미라서, s를 NULL로 초기화시켜버렸고, 실행과정에서 로직에러가 나버린 것이다.

 

비어있는 문자열을 만드려면 아래와 같이 해야 한다.

string s = "";

 

그렇다면 왜 문자열 자료형은 NULL로 초기화를 할 수 없을까? 아래 사이트를 참고하자.

https://ha-young.github.io/2020/cpp/2020-08-05-C++-String-%EB%AC%B8%EC%9E%90%EC%97%B4/

string 클래스는 내부적으로 char* array가 존재하고
포인터 변수, 크기변수 등을 제외하고 char array는 heap영역에 저장한다. (memory allocation)
플랫폼마다 다르지만, 보통 처음 16바이트로 설정하고 그 후에 크기가 모자라면 재할당(기존 힙영역 free)
32바이트, 64바이트 … 와 같은 식으로 늘려간다.

C++도 결국 C의 파생이라 기본적인 구조 자체는 똑같은 것이다. 포인터에다가 NULL을 넣으면 당연히 에러가 발생하게 된다. 물론 C에서는 에러 문구를 띄워주진 않았던 것으로 기억하지만, 주소값이 NULL이라는 것은 뭔가 잘못되었다는 의미라고 밖에는 할 수 없다. 예를 들어 할당에 실패했다거나..

아무튼 그러한 의미로 C++에서는 자체적으로 문자열 자료형이 NULL 값을 가지면 에러문구가 출력되도록 처리가 되어 있는 것 같다.

 

 

 

반응형

'코딩 > C++' 카테고리의 다른 글

알고리즘 - C++ 기초 / 자주 쓰이는 문법들  (0) 2022.03.24
C++ 공부하려고 찾아둔 사이트  (0) 2021.01.31