奇怪的C++指针新/删除问题

Pat*_*rio 2 c++ free pointers

#include <iostream>

using namespace std;

int main (int args, char **argv) {
    char *data = new char(16);
    for (int i = 0; i < 16; ++i) {
        data[i] = i; // works fine when commented out, also fails when data[i] = 0
    }

    char *res = new char (10);
    delete[] res;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出错误,请亲自看看:http://ideone.com/AgZhZB

*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09377018 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb7519ee2]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb76f751f]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdaPv+0x1b)[0xb76f757b]
./a.out[0x80485af]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb74bd4d3]
./a.out[0x80484b1]
Run Code Online (Sandbox Code Playgroud)

我没有线索.任何帮助将非常感激.

NPE*_*NPE 10

更换

char *data = new char(16);
Run Code Online (Sandbox Code Playgroud)

char *data = new char[16];
Run Code Online (Sandbox Code Playgroud)

你现在拥有的是一个单独的char并初始化它16.要分配数组,必须使用如上所示的方括号.

同样,替换

char *res = new char(10);
Run Code Online (Sandbox Code Playgroud)

char *res = new char[10];
Run Code Online (Sandbox Code Playgroud)

  • 9秒的答案,肯定是+1! (2认同)