SIGABORT在将文件读入双指针时

时间:2012-11-26 12:08:32

标签: c++ pointers ifstream sigabrt

运行此代码时我得到SIGABORT。 我发现我想使用方括号,但为什么行为是相同的。

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    double * dp  = new double (5); // what do round brackets mean, and why the behvior

    std::ifstream fid("testdata.txt");
    fid >> dp[0] >> dp[1] >> dp[2] >> dp[3] >> dp[4];
    fid.close();
}

“testdata.txt”的内容是:

4.0 5. 6. 6. 8. 7. 952.

仅当文件中有5个或更多双打时才会发生此错误。

1 个答案:

答案 0 :(得分:3)

更改

new double(5);

new double[5];

第一种语法在堆上创建一个double并将其设置为5.第二种语法创建一个包含五个双精度数组的数组。

无论哪种方式,最好在完成后删除dp。在第一种情况下,正确的语法是delete dp;,在第二种情况下,delete[] dp;