簡體   English   中英

檢測到glibc ./a.out:munmap_chunk():無效指針 - struct C ++的動態數組

[英]glibc detected ./a.out: munmap_chunk(): invalid pointer - dynamic array of struct C++

我有一個非常簡單的應用程序的問題,它使用動態分配的struct數組。 繼承我的代碼:

#include <iostream>
#include <string>
using namespace std;

struct MySimpleStuct
{
    string text;
    int intVal;
    double doubleVal;
};

int main(int argc, char **argv)
{
    int N;
    cin >> N;
    MySimpleStuct *s = new MySimpleStuct[N];
    delete s;
    return 0;
}

我得到這些錯誤:

*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x08f3c00c ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb74d5ee2]
/lib/i386-linux-gnu/libc.so.6(+0x765c5)[0xb74d65c5]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb76d251f]
./a.out[0x80487bf]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb74794d3]
./a.out[0x80486a1]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:07 393313     /home/katie/Desktop/Temp/a.out
08049000-0804a000 r--p 00000000 08:07 393313     /home/katie/Desktop/Temp/a.out
0804a000-0804b000 rw-p 00001000 08:07 393313     /home/katie/Desktop/Temp/a.out
08f3c000-08f5d000 rw-p 00000000 00:00 0          [heap]
b7432000-b7434000 rw-p 00000000 00:00 0 
b7434000-b745e000 r-xp 00000000 08:05 659543     /lib/i386-linux-gnu/libm-2.15.so
b745e000-b745f000 r--p 00029000 08:05 659543     /lib/i386-linux-gnu/libm-2.15.so
b745f000-b7460000 rw-p 0002a000 08:05 659543     /lib/i386-linux-gnu/libm-2.15.so
b7460000-b7603000 r-xp 00000000 08:05 655384     /lib/i386-linux-gnu/libc-2.15.so
b7603000-b7604000 ---p 001a3000 08:05 655384     /lib/i386-linux-gnu/libc-2.15.so
b7604000-b7606000 r--p 001a3000 08:05 655384     /lib/i386-linux-gnu/libc-2.15.so
b7606000-b7607000 rw-p 001a5000 08:05 655384     /lib/i386-linux-gnu/libc-2.15.so
b7607000-b760b000 rw-p 00000000 00:00 0 
b760b000-b7627000 r-xp 00000000 08:05 656309     /lib/i386-linux-gnu/libgcc_s.so.1
b7627000-b7628000 r--p 0001b000 08:05 656309     /lib/i386-linux-gnu/libgcc_s.so.1
b7628000-b7629000 rw-p 0001c000 08:05 656309     /lib/i386-linux-gnu/libgcc_s.so.1
b7629000-b7701000 r-xp 00000000 08:05 791499     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7701000-b7702000 ---p 000d8000 08:05 791499     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7702000-b7706000 r--p 000d8000 08:05 791499     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7706000-b7707000 rw-p 000dc000 08:05 791499     /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16
b7707000-b770e000 rw-p 00000000 00:00 0 
b7724000-b7728000 rw-p 00000000 00:00 0 
b7728000-b7729000 r-xp 00000000 00:00 0          [vdso]
b7729000-b7749000 r-xp 00000000 08:05 659544     /lib/i386-linux-gnu/ld-2.15.so
b7749000-b774a000 r--p 0001f000 08:05 659544     /lib/i386-linux-gnu/ld-2.15.so
b774a000-b774b000 rw-p 00020000 08:05 659544     /lib/i386-linux-gnu/ld-2.15.so
bf92e000-bf94f000 rw-p 00000000 00:00 0          [stack]
Aborted (core dumped)

甚至不知道為什么? 當我不刪除* s時,一切都是正確的但它不是解決方案......

你錯誤地使用new/delete, new[]/delete[] ,你應該調用delete []; 當你新建一個數組時:

MySimpleStuct *s = new MySimpleStuct[N];
delete [] s;

如果您注釋該字符串,該錯誤應該消失。

struct MySimpleStuct
{

  //string text;

  int intVal;

  double doubleVal;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM