运行此代码时我得到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个或更多双打时才会发生此错误。
答案 0 :(得分:3)
更改
new double(5);
到
new double[5];
第一种语法在堆上创建一个double并将其设置为5.第二种语法创建一个包含五个双精度数组的数组。
无论哪种方式,最好在完成后删除dp
。在第一种情况下,正确的语法是delete dp;
,在第二种情况下,delete[] dp;
。