2013-03-24 3 views
0

Windows VS 플랫폼에 코드를 작성했는데 컴파일 할 때 오류가 없습니다. 하지만 g ++ 컴파일러로 리눅스에서 컴파일하려고 할 때 아래에 표시된 오류가 발생합니다 :windows-linux g ++ 컴파일러 메모리 오류

[[email protected] ~]$ g++ main.cpp -o main 
[[email protected] ~]$ ./main "data1_h1.txt" "data1_r1.txt" 3 "output1_S1" 
*** glibc detected *** ./main: free(): invalid pointer: 0x00007fff795578b4 *** 
======= Backtrace: ========= 
/lib64/libc.so.6[0x320ec716af] 
/lib64/libc.so.6(cfree+0x4b)[0x320ec758db] 
./main(__gxx_personality_v0+0x3b2)[0x4013da] 
./main[0x401d4b] 
/lib64/libc.so.6(__libc_start_main+0xf4)[0x320ec1d9c4] 
./main(__gxx_personality_v0+0x71)[0x401099] 
======= Memory map: ======== 
00400000-00405000 r-xp 00000000 00:16 18302619       /users/lnxsrv1/ee/user/main 
00604000-00605000 rw-p 00004000 00:16 18302619       /users/lnxsrv1/ee/user/main 
11159000-1117a000 rw-p 11159000 00:00 0 
320e800000-320e81c000 r-xp 00000000 fd:00 1585318      /lib64/ld-2.5.so 
320ea1c000-320ea1d000 r--p 0001c000 fd:00 1585318      /lib64/ld-2.5.so 
320ea1d000-320ea1e000 rw-p 0001d000 fd:00 1585318      /lib64/ld-2.5.so 
320ec00000-320ed4f000 r-xp 00000000 fd:00 1585379      /lib64/libc-2.5.so 
320ed4f000-320ef4f000 ---p 0014f000 fd:00 1585379      /lib64/libc-2.5.so 
320ef4f000-320ef53000 r--p 0014f000 fd:00 1585379      /lib64/libc-2.5.so 
320ef53000-320ef54000 rw-p 00153000 fd:00 1585379      /lib64/libc-2.5.so 
320ef54000-320ef59000 rw-p 320ef54000 00:00 0 
320f000000-320f082000 r-xp 00000000 fd:00 1585438      /lib64/libm-2.5.so 
320f082000-320f281000 ---p 00082000 fd:00 1585438      /lib64/libm-2.5.so 
320f281000-320f282000 r--p 00081000 fd:00 1585438      /lib64/libm-2.5.so 
320f282000-320f283000 rw-p 00082000 fd:00 1585438      /lib64/libm-2.5.so 
3212800000-321280d000 r-xp 00000000 fd:00 1585420      /lib64/libgcc_s-4.1.2-20080825.so.1 
321280d000-3212a0d000 ---p 0000d000 fd:00 1585420      /lib64/libgcc_s-4.1.2-20080825.so.1 
3212a0d000-3212a0e000 rw-p 0000d000 fd:00 1585420      /lib64/libgcc_s-4.1.2-20080825.so.1 
3217000000-32170e6000 r-xp 00000000 fd:00 782090       /usr/lib64/libstdc++.so.6.0.8 
32170e6000-32172e5000 ---p 000e6000 fd:00 782090       /usr/lib64/libstdc++.so.6.0.8 
32172e5000-32172eb000 r--p 000e5000 fd:00 782090       /usr/lib64/libstdc++.so.6.0.8 
32172eb000-32172ee000 rw-p 000eb000 fd:00 782090       /usr/lib64/libstdc++.so.6.0.8 
32172ee000-3217300000 rw-p 32172ee000 00:00 0 
2b43d24f0000-2b43d24f2000 rw-p 2b43d24f0000 00:00 0 
2b43d2508000-2b43d250a000 rw-p 2b43d2508000 00:00 0 
7fff79543000-7fff79558000 rw-p 7ffffffe9000 00:00 0      [stack] 
7fff795fd000-7fff79600000 r-xp 7fff795fd000 00:00 0      [vdso] 
ffffffffff600000-ffffffffffe00000 ---p 00000000 00:00 0     [vsyscall] 
Aborted 

오류를 어떻게 해결할 수 있습니까? 감사합니다 ...

+1

지금 당장 우리는 실수로'free()'를 제거하는 것이 좋습니다. 코드를 보여 주면 더 잘 도와 줄 수 있습니다. –

+1

이미 해제 된 메모리 주소에서'free'를 호출 한 것처럼 보입니다. 그렇지 않으면 처음에는 사용되지 않았습니다. 디버깅 정보 ('-g')로 프로그램을 컴파일하고 디버거 ('gdb')에서 프로그램을 실행하면 더 많은 정보를 얻을 수 있습니다. – Joni

+0

전체 코드를 공유했습니다. – JoshuaJeanThree

답변

1

할당하지 않은 메모리를 확보하고 있습니다. 첫 번째 예제는 residentData입니다.

사용자가 할당하지 않았더라도 argv[1]으로 메인에 할당하고 후자는 delete[]입니다. (기술적으로, 당신은 할당했다. 방금 그것을 argv[1]로 바꿨다.)

@Basile Starynkevitch에서 제안한대로 valgrind에서 코드를 실행하고 싶을 것입니다. 많은 메모리 오류를 찾아냅니다.

+0

delete [] residentData와 다른 것들을 제거하면 문제가 해결됩니다. 고맙습니다. – JoshuaJeanThree

1

컴파일 타임에는 오류가 발생하지 않지만 런타임에는 오류가 발생합니다.

으로 메모리 누수를 디버깅하고 물론 gdb 디버거를 사용하여 g++ -Wall -g (그리고 경고가 나올 때까지 코드를 향상 시키십시오)을 컴파일하는 것이 좋습니다.

관련 문제