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

标签 c++ pointers free

<分区>

#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;
}

报错,自己看: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]

我一无所知。任何帮助将不胜感激。

最佳答案

替换

char *data = new char(16);

char *data = new char[16];

您现在拥有的是分配单个 char 并将其初始化为 16。要分配数组,您必须使用方括号,如上所示。

同理,替换

char *res = new char(10);

char *res = new char[10];

关于c++ - 奇怪的 C++ 指针新建/删除问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15242018/

相关文章:

c++ - 请求或 AccessManager QT

c - 默认情况下,赋值使整数指针不启用强制转换

c++ - 我可以通过这种方式为链接列表实现push_back方法吗?

c - 为什么 "*(&arr+4)"与 "&arr[4]"不同?

c - 为什么空闲列表没有排序?

C: do-while 释放链表

c# - 在第一次使用之前声明变量有什么缺点?

c++ - 编译 zxing 时 Libconv 无法转换参数

c - Malloc 重新分配免费

c++ - 在 O(n) 时间内找到所有元素小于 10^6 的序列的最长连续子序列的长度