Ошибка записи в память конкретного элемента данных - PullRequest
0 голосов
/ 26 сентября 2011

Хорошо, у меня есть структура, TextBlock, которая имитирует перемещение блоков текста по экрану. Вот заголовок:

struct TextBlock
{
    RECT textArea;
    RECT rectArea;
    double whatBlock;
    double x;
    double y;
    double angle;
    double speed;
    double width;
    double height;
    char *word;
    bool stuck;
};

Когда это так, все работает отлично. Проблема возникает, когда я добавляю еще одного члена, который мне нужен. Это работает так, что у меня есть два массива TextBlocks. Первый предназначен для движущихся, второй - для тех, которые не двигаются, показывая, куда нужно идти движущимся. Все слова рандомизированы от предложения до беспорядка, поэтому этот элемент данных будет установлен (закомментирован) на индекс того, какой статический блок принадлежит движущемуся, поэтому я знаю, когда он находится в нужном месте.
int whatBlock;
После создания я прохожу все созданные объекты и устанавливаю
tb[i][j].whatBlock = 0; //same area as other data members being set, moving text stb[i][j].whatBlock = 0; //static text block

Когда я пытаюсь запустить это, ничего не делая с элементом данных, возникает ошибка:

The instruction at [address] referenced memory at [different address]. The memory could not be "written".

Обратите внимание, что если я не попытаюсь изменить его, а просто создаю элемент данных, это сработает.

На этом этапе, когда я почти закончил и у меня появилось множество подобных проблем, я немного устал от этой программы>.> Любая помощь по этому вопросу будет принята с благодарностью.

РЕДАКТИРОВАТЬ: Эта проблема теперь исправлена. Я ответил на принятый ответ с объяснением, но это создает другую проблему, даже если это не влияет на эту программу.

Ответы [ 3 ]

1 голос
/ 26 сентября 2011
  • Принудительная перестройка всего.У вас может быть объектный файл, который устарел по отношению к заголовочному файлу, который определяет TextBlock

  • Если это не помогло, запустите вашу программу под отладчиком и посмотритечто такое ошибочная инструкция.Либо это позволит вам исправить программу, либо вы можете запросить ее снова с помощью mroe informatin.

0 голосов
/ 26 сентября 2011

Я не могу давать советы, так как мы не можем получить доступ к полному исходному коду.

В любом случае, я могу предложить вам, что это может быть не в struct TextBlock, где действительно скрывается ошибка. Например, каждый доступ к члену TextBlock означает, что вы обращаетесь к скрытой переменной this.

Если этот указатель поврежден, вы можете столкнуться с проблемой, когда вы его не ожидаете, что приведет к поиску в неправильных местах.

0 голосов
/ 26 сентября 2011

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

Если вы отправите больше кода, я соответствующим образом отредактирую этот ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...