写入特定数据成员的内存时出错

时间:2011-09-26 16:05:00

标签: c++ oop

好的,我有一个结构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 个答案:

答案 0 :(得分:1)

  • 强制重建一切。对于定义TextBlock的头文件,您可能有一个过时的目标文件

  • 如果这不能解决问题,请在调试器下运行程序,看看故障指令是什么。这可以让你修复程序,或者你可以再次询问有关信息的信息。

答案 1 :(得分:0)

如果没有发布更多代码,我只能告诉您程序中可能存在内存损坏错误 - 即您正在读取或写入超出已分配内存的末尾。

如果您发布更多代码,我会相应地编辑此答案。

答案 2 :(得分:0)

我无法提供建议,因为我们无法访问完整的源代码。

无论如何,我可以建议你,它可能不在真正隐藏bug的struct TextBlock中。例如,对TextBlock成员的每次访问都意味着您正在访问this隐藏变量。

如果此指针已损坏,您可能会遇到问题,导致您在错误的位置搜索。