Почему ошибка Run-Time Check Failure #2 - Stack around the variable 'var' was corrupted.

171
09 января 2019, 15:30

По завершению работы функции выдает ошибку

иногда это

Run-Time Check Failure #2 - Stack around the variable 'corrW_' was corrupted.

а иногда вот это

Run-Time Check Failure #2 - Stack around the variable 'w_' was corrupted.

Грешил, что памяти мало выделяется, так нет всё в порядке.

    double *corrW_ = new double[l_];
    ::ReadFile(file_, &corrW_, (sizeof(corrW_[0])*l_), &fl, NULL);
    ::SetFilePointer(file_, mfl, 0, FILE_CURRENT);
    int qw_ = 0;
    qw_ += s_in_*nl_[0];
    for (int i = 0; i < l_ - 1; i++)
        qw_ += nl_[i] * nl_[i+1];
    double ***w_ = new double**[l_];    
    for (int i = 0; i < l_; i++) {  
        w_[i] = new double*[nl_[i]];    
        for (int j = 0; j < nl_[i]; j++) {  
            w_[i][j] = new double[(i == 0) ? s_in_ :
                (nl_[j])];  
        }   
    }
    ::ReadFile(file_, &w_, sizeof(w_[0][0][0])*qw_, &fl, NULL);

Что здесь может быть не так?

Answer 1

Передача указателя на переменную &corrW_ приводит к записи прочитанных данных в эту переменную, а не в буфер, на которые она указывает.

Во втором случае проблема еще серьезнее, так как прочитать данные во множество буферов за один проход не получится.

Что касается double *** - Three Star Programmer

READ ALSO
Поиск повторений через map

Поиск повторений через map

Решал задачу, суть которой было найти максимальное количество повторенийПосле решения задачи посмотрел предложенный вариант её решения

177
Найти количество дубликатов в std::map

Найти количество дубликатов в std::map

Как найти количество дубликатов в map?

168
список указателей на объекты и удаление из списка

список указателей на объекты и удаление из списка

Как получить доступ к ним по итератору, чтобы можно было удалять объект из коллекции? struct Base { virtual void doit() { cout << "Base!\n"; } virtual...

170
Y=1.QNan. C++ в чем может быть причина?

Y=1.QNan. C++ в чем может быть причина?

Попытался сделать задачу из интернета на If,ElseВ итоге X выводится нормально,а Y с QNan

193