SIGABORT при чтении файла в двойной указатель

я получил 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 или более двойников.

2

Решение

+ Изменить

new double(5);

в

new double[5];

Первый синтаксис создает один двойник в куче и устанавливает его на 5. Второй синтаксис создает массив из пяти двойников.

В любом случае, это хорошая практика для удаления dp когда вы закончите с этим. В первом случае правильный синтаксис delete dp; а во втором, delete[] dp;,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]