я получил 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;
,
Других решений пока нет …