c ++ «Ошибка проверки времени выполнения # 2 - стек вокруг переменной поврежден» при чтении значений из файла ppm-изображения - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь прочитать значения из файла ppm-изображения, и я получаю сообщение «Ошибка проверки времени выполнения # 2 - стек вокруг переменной« числа »был поврежден».Я новичок в C ++ и программировании в целом, и я не понимаю, в чем проблема, кто-то может помочь?

Я не знаю, если это важно, но код, который я написал в основном, я позже передам вМетод, который будет выполнять эту задачу (я сделаю все необходимые корректировки), будет ли аналогичная ошибка возникать внутри метода?

(код написан в Visual Studio в режиме отладки)

int main(int argc, char *argv[]) {

ifstream imagefile(argv[1], ios::binary);

if (!imagefile.is_open()) {
printf("error opening");
return 0;
}

string values[4];
int x;
for (int i = 0; i < 4; i++) {
    string str;
    char c = imagefile.get();

    while (!isspace(static_cast<unsigned char>(c))) {   
        str = str + c;
        c = imagefile.get();
        if (str.size() > 10000) {
            cout << "wrong" << endl;    //for testing
            goto stop;
        }
    }
    x=i;
    cout << x << endl;  //for testing
    values[i] = str;
    cout << str << endl;    //for testing
}   
stop:
if (!values[0].compare("P6") == 0 || x!=3) {
    cout << "wrong format" << endl;
    system("pause");
    return 0;
}

int numbers[3];
for (int i= 1; i <4; i++) {
    stringstream str;       //to convert string to integer
    str << values[i];
    int number;
    str >> number;
    numbers[i] = number;
    cout << numbers[i] +1<< endl;   //for testing
}

int start = imagefile.tellg();
imagefile.seekg(0, ios::end);
int end = imagefile.tellg();
int size = end - start;
imagefile.seekg(start, ios::beg);
float *pixels = new float[size];
for (int i = 0; i < size; i++) {
    int c = imagefile.get();
    float f = c / 255.0;
    pixels[i] = f;
}

system("pause");

return 0;

}

...