У меня есть очень странный вопрос в, казалось бы, простой код (для целей отладки, я упростил теперь в значительной степени этот код):Странное поведение памяти - C++
class Buf {
Frame ** frames;
Buf(int a);
int a;
long b, c, d
}
Buf::Buf(int size){
a = size;
frames = new Frame*[size];
for (int f = 0; f < size; ++f){
frames[f] = new Frame;
}
b = c = d = 5; // (***)
}
класс Рама очень простой и небольшой, Я отключил любые операции с памятью в своем конструкторе/деструкторе.
В main
Я зову:
Buf* buf = new Buf(50);
После того, как в то время он прекрасно работает, но большую часть времени она работает нормально до (***) линии, а затем, когда я прохожу эту линию, как я может видеть в отладчике, * кадр, кадр [1] и т. д. становится равным 5 (!) или любому другому числу, которое я ввел в задание.
Если я попытаюсь запустить его из командной строки, он сообщает мне о плохом доступе к памяти.
Как я уже сказал, я упростил свою программу, чтобы быть чрезвычайно тривиальным, но не могу найти ошибку.
Любые предложения/помощь будут фантастическими!
UPDATE:
Я скопировал код на другой компьютер (с аналогичной конфигурацией), и я не могу воспроизвести проблему там. На исходном компьютере я могу воспроизвести проблему, выполняю ли я проект из XCode или Eclipse/командной строки (разные копии кода).
Почему вы управляете указателями самостоятельно? Это ошибка. –
Три вещи: Почему вы используете указатель на указатель на 'Frame' вместо' std :: vector '? Тогда почему вы не используете списки инициализаторов? И почему вы динамически выделяете объект 'Buf' в своей функции' main'? –
Предложение: если вы считаете, что класс «Frame» не связан с проблемой, замените его на «int», добавьте «main», и у вас есть [MCVE] (http://stackoverflow.com/help/ mcve), что значительно поможет в диагностике. – yeputons