将文件读取到双指针时进行 SIGABORT

SIGABORT when reading file into double pointer

本文关键字:SIGABORT 指针 文件 读取      更新时间:2023-10-16

运行此代码时我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 个或更多双精度时,才会发生此错误。

更改

new double(5);

new double[5];

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

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