const 변수 값 변경하기
글쓴이: munhoney / 작성시간: 화, 2011/01/18 - 2:25오후
const로 된 변수의 데이터를 변경할려고 합니다.
예를 들어.
1 #include
2
3 const int test1 = 0;
4
5 int main()
6 {
7 int* test2 = &test1;
8
9 *test2 = 10;
10
11 printf("Value : %d \n", test1);
12
13 return 0;
14 }
와 같이 할려고 하는데 안되는군요. (당연히 const에 대입할려고 하니 안되는 건 맞지만요..)
일단 이렇게 하면 컴파일은 되는데, segment fault가 발생합니다.
혹시 현재 0의 값을 10으로 변경할 수 있는 방법이 있는지요.
참고로 리눅스 커널 모듈로 개발할 예정입니다.
Forums:
const_cast ?
const_cast ?
이게 C에서 const가 확실하지 않아서 그럽니다.
const int a라고 할때 a가 그냥 변경할수 없는건지(immutable) 아니면 컴파일 시간에 정해지는 것인지 명확하지가 않습니다. 근데 굳이 const로 하실 필요가 있나요? 실행중에 값이 변경되면 const로 하지 않는것이 더 맞아 보입니다.
저 전역 const 변수는 데이터 영역에 할당되는것이
저 전역 const 변수는 데이터 영역에 할당되는것이 아닌 상수영역에 할당되는걸로 압니다.
상수영역에 할당되면 수정이 불가능합니다.
아래 참고
http://illnessm.egloos.com/1368768
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
맞습니다. 기본적으로는 const 변수는 상수
맞습니다. 기본적으로는 const 변수는 상수 영역(.rdata)에 할당 됩니다.
따라서 변경이 힘들지요.
하지만 분명 가능한 방법이 있을 걸로 생각듭니다.
예를 들면 change_page_attr을 사용한다든지, 혹은 write_cr0을 사용한다든지요..
그런데 잘 되지 않은 것 같아서 이렇게 문의 해봅니다.
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
이 글을 참고 하면되지
이 글을 참고 하면되지 않을까요?
http://kldp.org/node/120132#comment-543262
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
음 포인터로 가능하네요
#include
int main()
{
const int test = 0;
int* p_test = (int*)&test;
*p_test += 1;
printf("%d\n", test);
printf("%d\n", *p_test);
return 0;
}
모두 java만하면 밭은 누가갈어?? 밭갈고 싶어 C를 배운다.
그건 자동 변수여서 그런거구요. static
그건 자동 변수여서 그런거구요. static const int로 해보세요.
댓글 달기