C++ 错误 : Free() invalid next size (fast)

标签 c++

我只有一个 10 行的 C++ 程序,当我运行它时它会抛出半页错误。

这是下面的程序

void getDataset(double ** f, int nRows, int nAttribute){
    ifstream u;
    u.open("iris.txt");


    for(int i = 0; i < nRows; i++)
        for(int j = 0; j < nAttribute; j++)
            u >> f[i][j];
}

int main(){
    int nRows = 150, nAttribute = 4, k = 3;

    double * mat[nRows];
    for(int i = 0; i < nRows; i++){
        mat[i] = new double(nAttribute);
    }
    mat[149][3] = 2;
    getDataset(mat, nRows, nAttribute);
    cout << mat[100][2] << endl;
}

我尝试使用 ./a.out > error.log 复制错误,但它不起作用。 error.log 为空。所以我不得不直接复制粘贴到这里。

*** glibc detected *** ./a.out: free(): invalid next size (fast): 0x0000000000ef1520 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7e846)[0x7f8ba675b846]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_ZNSsD1Ev+0x23)[0x7f8ba704cc13]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_ZNKSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateRd+0xf5)[0x7f8ba703cb25]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_ZNSi10_M_extractIdEERSiRT_+0x8f)[0x7f8ba702d22f]
./a.out[0x40170c]
./a.out[0x40186f]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f8ba66fe76d]
./a.out[0x400aa9]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:06 524669                             /home/aditya/Documents/a.out
00601000-00602000 r--p 00001000 08:06 524669                             /home/aditya/Documents/a.out
00602000-00603000 rw-p 00002000 08:06 524669                             /home/aditya/Documents/a.out
00eee000-00f0f000 rw-p 00000000 00:00 0                                  [heap]
7f8ba66dd000-7f8ba6892000 r-xp 00000000 08:06 1447163                    /lib/x86_64-linux-gnu/libc-2.15.so
7f8ba6892000-7f8ba6a91000 ---p 001b5000 08:06 1447163                    /lib/x86_64-linux-gnu/libc-2.15.so
7f8ba6a91000-7f8ba6a95000 r--p 001b4000 08:06 1447163                    /lib/x86_64-linux-gnu/libc-2.15.so
7f8ba6a95000-7f8ba6a97000 rw-p 001b8000 08:06 1447163                    /lib/x86_64-linux-gnu/libc-2.15.so
7f8ba6a97000-7f8ba6a9c000 rw-p 00000000 00:00 0 
7f8ba6a9c000-7f8ba6ab1000 r-xp 00000000 08:06 1440108                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8ba6ab1000-7f8ba6cb0000 ---p 00015000 08:06 1440108                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8ba6cb0000-7f8ba6cb1000 r--p 00014000 08:06 1440108                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8ba6cb1000-7f8ba6cb2000 rw-p 00015000 08:06 1440108                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f8ba6cb2000-7f8ba6dad000 r-xp 00000000 08:06 1447283                    /lib/x86_64-linux-gnu/libm-2.15.so
7f8ba6dad000-7f8ba6fac000 ---p 000fb000 08:06 1447283                    /lib/x86_64-linux-gnu/libm-2.15.so
7f8ba6fac000-7f8ba6fad000 r--p 000fa000 08:06 1447283                    /lib/x86_64-linux-gnu/libm-2.15.so
7f8ba6fad000-7f8ba6fae000 rw-p 000fb000 08:06 1447283                    /lib/x86_64-linux-gnu/libm-2.15.so
7f8ba6fae000-7f8ba7090000 r-xp 00000000 08:06 400528                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f8ba7090000-7f8ba728f000 ---p 000e2000 08:06 400528                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f8ba728f000-7f8ba7297000 r--p 000e1000 08:06 400528                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f8ba7297000-7f8ba7299000 rw-p 000e9000 08:06 400528                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.16
7f8ba7299000-7f8ba72ae000 rw-p 00000000 00:00 0 
7f8ba72ae000-7f8ba72d0000 r-xp 00000000 08:06 1447286                    /lib/x86_64-linux-gnu/ld-2.15.so
7f8ba74b3000-7f8ba74b8000 rw-p 00000000 00:00 0 
7f8ba74cd000-7f8ba74d0000 rw-p 00000000 00:00 0 
7f8ba74d0000-7f8ba74d1000 r--p 00022000 08:06 1447286                    /lib/x86_64-linux-gnu/ld-2.15.so
7f8ba74d1000-7f8ba74d3000 rw-p 00023000 08:06 1447286                    /lib/x86_64-linux-gnu/ld-2.15.so
7fff6ef55000-7fff6ef76000 rw-p 00000000 00:00 0                          [stack]
7fff6ef8c000-7fff6ef8d000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted

最佳答案

您没有使用 new double(nAttribute) 分配 double 组。您的代码需要更改为 new double[ nAttribute ]

关于C++ 错误 : Free() invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26665641/

相关文章:

c++ - 为什么未关闭的文件大小是 4 个字节

c++ - 如何从继承的子类访问基类中的私有(private)成员 (C++)

c++ - C++中 "Class1::Class2"是什么意思?

c++ - 为什么前向声明在这种情况下不起作用?

python - 没有 DLL 的 SWIG + Python

c++ - 模板函数和该函数的非模板重载,哪个是最佳匹配?

c++ - 在 C++ 中访问 Windows 任务栏图标

c++ - unordered_map 和虚拟模板

c++ - 列表中的原始指针与唯一指针

c++ - SHBindToParent,获取父 pidl