|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
윤주영
가입: 2006년 5월 6일 올린 글: 5
|
올려짐: 2006년6월15일 21:56 주제: malloc에서 할당된 메모리의 범위에 대해서... |
|
|
malloc (readint) 등과 같이 쓰면 할당된 메모리의 사이즈가 음수가 될 수 있습니다. 이경우 프로그램이 정상적으로 동작한 경우라면 readint값이 양수이어야할테고 따라서 새로 할당된 메모리의 사이즈는 [1,infinite]일 것입니다.
제가 궁금한 것은 프로젝트에서 목표로 하는 것이 '정상적으로 프로그램이 동작했다고 가정할 때 가지게 되는 메모리의 범위'만 구하면 충분한 것인가입니다. 즉, 각각의 지점에서는 이전의 명령들의 수행에서 에러가 전혀 발생하지 않았다고 가정하고 메모리 상태를 유지하는 것이지요.
그렇다면 위와 같은 구문에서는 메모리의 크기가 [1,infinite]로 요약되어야 할것같은데(0 이하이면 에러이므로), 참고삼아 airac5를 보니 거기에서는 버퍼 사이즈의 범위에 음수를 사용하고 있네요. |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년6월16일 14:24 주제: |
|
|
인용: | 제가 궁금한 것은 프로젝트에서 목표로 하는 것이 '정상적으로 프로그램이 동작했다고 가정할 때 가지게 되는 메모리의 범위'만 구하면 충분한 것인가입니다. |
분석을 진행할때 선택하기 어려운 것 중에 하나는 error상황을 어떻게 처리할 것 인가 입니다.
코드: |
1: int main()
2: {
3: int *a;
4:
5: if (t) { z = -1;} else { z = 2;}
6:
7: a = malloc(z);
8: a[0] = 1; /* 13 */
9:
10: return 0;
11: } |
위의 코드를 보면 8번째 줄에서 에러가 날 수 있습니다. 만약 정상적으로 처리되었다고
하고 어레이의 크기를 [1,2] 로 하고 분석을 진행했다면 8번째 라인의 에러를
찾기가 어려울 것 입니다.
물론 a에 할당된 어레이가 error일 수 있다는 정보를 저장하고 있다가, a[0]처럼
그 어레이의 원소값을 읽을 때 error라고 리포트를 해 줄 수는 있을 것 입니다.
하지만 이 방법은 자연스럽지 못한 것 같습니다. |
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|