2014-02-08 2 views
0

우분투 시스템에서 간단한 C++ 프로그램을 실행할 때 이중 자유 또는 손상 오류가 발생합니다. 이것은 잠시 동안 나를 괴롭혔다. 이 오류를 표시하는 줄을 표시했습니다. 내가 그 라인에 주석을 달았을 때 아무런 오류가 없다. 이 오류를 제거하려면 어떻게해야합니까? Plz 도와주세요! 테스트 케이스의 수와 입력으로 두 문자열을 입력 한 후C++ double free or corruption 오류

#include <iostream> 
#include <vector> 
#include <string> 

using namespace std; 

int main() 
{ 
int t; 
int count = 0; 
string a, b; 

vector<int> v(57, 0); 

cin >> t; 

while(t--) { 
    cin >> a >> b; 

    for (int i = 0; i < a.size(); i++) { 
     v[a[i] - 65]++; 
     cout << char(a[i]) << " " << v[a[i] - 65] << endl; 
    } 
    cout << endl; 

    for (int j = 0; j < b.size(); j++) { 
     int id = b[j] - 65; 
     if (v[id] > 0) { 
      int abc = v[id]; 
      v[id] = abc - 1; /*****ERROR******/ 
      cout << char(b[j]) << " "; 
      count++; 
     } 
    } 

    cout << count << endl; 
    cout << "----" << endl; 
    count = 0; 
} 

return 0; 
} 

, 나는 다음과 같은 오류 얻을 : 나는 V의 크기가 하나가 꺼져 생각

1 
abcd 
xyz 
a 1 
b 1 
c 1 
d 1 

z 1 
---- 
*** Error in `./a.out': double free or corruption (!prev): 0x09db6008 *** 
======= Backtrace: ========= 
/lib/i386-linux-gnu/libc.so.6(+0x767e2)[0xb74b97e2] 
/lib/i386-linux-gnu/libc.so.6(+0x77530)[0xb74ba530] 
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb765db4f] 
./a.out[0x8049147] 
./a.out[0x8049091] 
./a.out[0x8048f99] 
./a.out[0x8048ef6] 
./a.out[0x8048d79] 
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0xb745c935] 
./a.out[0x80489a1] 
======= Memory map: ======== 
08048000-0804a000 r-xp 00000000 08:05 4195506 /home/vijender/codechef/a.out 
0804a000-0804b000 r--p 00001000 08:05 4195506 /home/vijender/codechef/a.out 
0804b000-0804c000 rw-p 00002000 08:05 4195506 /home/vijender/codechef/a.out 
09db6000-09dd7000 rw-p 00000000 00:00 0   [heap] 
b73fe000-b7400000 rw-p 00000000 00:00 0 
b7400000-b7441000 r-xp 00000000 08:05 3670121 /lib/i386-linux-gnu/libm-2.17.so 
b7441000-b7442000 r--p 00040000 08:05 3670121 /lib/i386-linux-gnu/libm-2.17.so 
b7442000-b7443000 rw-p 00041000 08:05 3670121 /lib/i386-linux-gnu/libm-2.17.so 
b7443000-b75f1000 r-xp 00000000 08:05 3670122 /lib/i386-linux-gnu/libc-2.17.so 
b75f1000-b75f3000 r--p 001ae000 08:05 3670122 /lib/i386-linux-gnu/libc-2.17.so 
b75f3000-b75f4000 rw-p 001b0000 08:05 3670122 /lib/i386-linux-gnu/libc-2.17.so 
b75f4000-b75f8000 rw-p 00000000 00:00 0 
b75f8000-b7613000 r-xp 00000000 08:05 3670878 /lib/i386-linux-gnu/libgcc_s.so.1 
b7613000-b7614000 r--p 0001a000 08:05 3670878 /lib/i386-linux-gnu/libgcc_s.so.1 
b7614000-b7615000 rw-p 0001b000 08:05 3670878 /lib/i386-linux-gnu/libgcc_s.so.1 
b7615000-b76f1000 r-xp 00000000 08:05 268046  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 
b76f1000-b76f2000 ---p 000dc000 08:05 268046  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 
b76f2000-b76f6000 r--p 000dc000 08:05 268046  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 
b76f6000-b76f7000 rw-p 000e0000 08:05 268046  /usr/lib/i386-linux-gnu/libstdc++.so.6.0.17 
b76f7000-b76fe000 rw-p 00000000 00:00 0 
b7717000-b771c000 rw-p 00000000 00:00 0 
b771c000-b771d000 r-xp 00000000 00:00 0   [vdso] 
b771d000-b773d000 r-xp 00000000 08:05 367/lib/i386-linux-gnu/ld-2.17.so 
b773d000-b773e000 r--p 0001f000 08:05 367/lib/i386-linux-gnu/ld-2.17.so 
b773e000-b773f000 rw-p 00020000 08:05 367/lib/i386-linux-gnu/ld-2.17.so 
bfa67000-bfa88000 rw-p 00000000 00:00 0   [stack] 
Aborted (core dumped) 
+0

'id'값은 무엇입니까? – John3136

+0

'v [id]'대신'v.at (id)'를 사용하면 std :: out_of_range의 정확한 오류를 제공합니다. – cdbitesky

답변

0

을; 당신이 얻을 수있는 가장 큰 인덱스는 56이지만, 'z'-65 = 57입니다. 벡터 대신에 unordered_map을 사용하는 것을 권장합니다. 또한 Unicode 문자로 확장하는 것이 더 좋습니다 :).

관련 문제