read only data 영역에 관하여

mr.lee의 이미지

예전에 다른분한테 물어봤을때 '바뀔수도 있다' 고 하시긴 하셨지만..다시 궁금해지네요.

const char* str = "GOOD"; 이라고 했을때.

이 GOOD 이라는 문자열은 프로그램의 read only data 영역에 만들어지고 이 포인터를 갖게 되는것일텐데요.
그렇다면 구조체안에서 이런식의 const 문자열을 갖고 있어야 하는것이 있다고 할때 굳이 char[] 로 하지 않아도 되지 않을까요.

typedef struct
{
  int id;
  const char* name;
}
Type;
 
 
Type* type = (Type*) malloc(sizeof(Type));
type->id = getUniqId();
type->name = "TestType";

뭐 이런식이 되겠죠. 메모리도 절약되고.. 이러한 방식이 문제가 되는 경우가 있을까요?

chadr의 이미지

type->name = "TestType"; 라는 코드는 "TestType" 가 들어있는 read only data영역의 포인터를
넣어주는 것이므로 문제는 없습니다.. 전혀 문법상에 문제가 있지도 않구요.

대신 저게 프로그램에서 논리적으로 어떻게 쓰이느냐에 따라서 버그는 발생할수 있겠지요 :)
-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.