Итак, проблема, с которой я столкнулся в этом коде, заключается в том, что при его запуске я получаю сообщение об ошибке: terminate called after throwing an instance of "std:bad_array_new_length" what(): std:: bad_array_new_length
В противном случае ошибок нет, и код компилируется просто отлично.Ниже приведен текстовый файл, который я пытаюсь загрузить:
10 8
0 255 255 255 0 0 255 255 255 0
255 0 255 255 0 0 255 255 0 255
255 255 0 255 255 255 255 0 255 255
255 255 255 0 255 255 0 255 255 255
255 255 255 355 0 0 255 255 255 255
255 255 255 255 0 0 255 255 255 255
255 255 255 0 255 255 0 255 255 255
0 0 0 255 255 255 255 0 0 0
Первые два значения (10/8) - это длина (строки) и высота (столбцы), а остальные предназначены для хранения вмассив 2d.
#include <iostream>
#include <fstream>
#include <string>
#include "image.h" // Has the prototypes for the functions
using namespace std;
int** load(string imageFile, int &length, int &height) {
int** array = new int*[length];
ifstream file(imageFile);
if(file.is_open()) {
file >> length; // Takes the first value and stores it as length
file >> height; // Takes the second value and stores it as height
for(int i = 0; i < length; i++) {
array[i] = new int[height];
for(int j = 0; j < height; j++) {
file >> array[i][j];
}
}
}
else {
cout << "Unable to open file." << endl;
return 0;
}
return array;
}
int main() {
int height, length;
int **image = load("../resource/imagecorrupted.txt", length, height);
}
Я должен добавить, что это домашнее задание, поэтому я довольно ограничен в том, что я могу сделать.В основном мне нужно сохранить значения из загрузки в ** образ, а также параметры функции, которые были заданы для меня, и их нельзя изменить.Кроме того, это все еще довольно рано в классе, поэтому для этого назначения мы не должны использовать структуры или классы или что-то подобное.Спасибо за любую помощь / совет, который вы можете дать мне!
РЕДАКТИРОВАТЬ:
Благодаря @IgorTandetnik рассказал мне о моей проблеме, я нашел решение.Этот новый код работает, если у кого-то возникнет та же проблема в будущем, и ему потребуется помощь:
int** load(string imageFile, int &length, int &height) {
ifstream file(imageFile);
if(file.is_open()) {
file >> length;
int** array = new int*[length];
file >> height;
for(int i = 0; i < length; i++) {
array[i] = new int[height];
for(int j = 0; j < height; j++) {
file >> array[i][j];
}
}
return array;
}
else {
cout << "Unable to open file." << endl;
return 0;
}
}
int main() {
int height = 0;
int length = 0;
int **image = load("../resource/imagecorrupted.txt", length, height);
}