이 글에서는 valgrind memory test 결과에 대해서 설명합니다.
Table Of Contents
Valgrind Memcheck 테스트 결과 소스 및 출력
valgrid test 결과 동일한 유형의 invalid read/write는 최초 한번 발생 후 두 번째 부터는 발생하지 않으므로, 매 테스트 시 valgrind를 재시작 해야합니다.
% gcc -o valtest valtest.c
[bdw-ex-altibase] lswhh: ~/tmp
% valgrind --tool=memcheck --error-limit=no valtest
==166527== Memcheck, a memory error detector
==166527== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==166527== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
==166527== Command: valtest
==166527==
==166527== Invalid read of size 4
==166527== at 0x4006BD: main (in /p3700/lswhh/tmp/valtest)
==166527== Address 0x51fe428 is 1,000 bytes inside a block of size 1,080 free'd
==166527== at 0x4C2D5ED: free (vg_replace_malloc.c:755)
==166527== by 0x4006A9: main (in /p3700/lswhh/tmp/valtest)
==166527== Block was alloc'd at
==166527== at 0x4C2B067: malloc (vg_replace_malloc.c:380)
==166527== by 0x400661: main (in /p3700/lswhh/tmp/valtest)
==166527==
==166527== Invalid write of size 4
==166527== at 0x4006C9: main (in /p3700/lswhh/tmp/valtest)
==166527== Address 0x51fe428 is 1,000 bytes inside a block of size 1,080 free'd
==166527== at 0x4C2D5ED: free (vg_replace_malloc.c:755)
==166527== by 0x4006A9: main (in /p3700/lswhh/tmp/valtest)
==166527== Block was alloc'd at
==166527== at 0x4C2B067: malloc (vg_replace_malloc.c:380)
==166527== by 0x400661: main (in /p3700/lswhh/tmp/valtest)
==166527==
testValue: 6
testValue: 6
testValue: 6
testValue: 6
testValue: 6
testValue: 6
testValue: 6
testValue: 6
invalid read의 경우 현재 사용하는 버전의 valgrind에서 한번만 나타나도 동일한 invalid read/write는 두 번째에 나타나지 않는것을 확인하였습니다.
아래 코드 참고하시기 바랍니다.
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
void * testPtr = NULL;
int * testIntPtr = NULL;
int testValue = 0;
while ( 1 )
{
testPtr = malloc(1080);
assert(testPtr != NULL);
testIntPtr = (int*)&((char*)testPtr)[1000];
*testIntPtr = 5;
free(testPtr);
sleep(1);
/* invalid read */
testValue = *testIntPtr;
/* invalid write */
*testIntPtr = testValue++;
printf("testValue: %d\n", testValue);
}
return 0;
}
'IT' 카테고리의 다른 글
git 충돌 | conflict 해결하는 방법 - command line (0) | 2024.01.21 |
---|---|
git 사용 시 수정 이전으로 내용 되돌리는 방법 (소스코드 관리) (0) | 2024.01.21 |
vscode 한글 설치 및 설정하기 (0) | 2024.01.21 |
카디널리티(Cardinality)와 선택도(Selectivity)에 대한 이해 (0) | 2024.01.21 |
github에 신규 리파지토리를 만들고 로컬 디렉토리 연결하기 (0) | 2024.01.21 |