奇怪的记忆行为 - C ++

时间:2017-02-22 13:15:47

标签: c++ memory-management

我在一个看似简单的代码中有一个非常奇怪的问题(出于调试目的,我现在将其简化为几乎这个代码):

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; // (***)
}

Frame类非常简单和小,我在其构造函数/析构函数中禁用了任何内存操作。

我在呼叫main

Buf* buf =  new Buf(50);

偶尔它工作正常,但大多数时候它工作正常,直到(***)行,然后当我通过这行时,我可以在调试器中看到,* frame,frame [1]等等等于5(!)或我在作业中输入的任何其他数字。

如果我尝试从命令行运行它,它会告诉我有关内存访问不良的信息。

正如我所说,我简化了我的程序是非常琐碎的,仍然找不到错误。

任何建议/帮助都会很棒!

更新:

我将代码复制到另一台计算机(具有类似的配置),我无法在那里重现问题。在原始计算机上,我可以重现问题,无论是从XCode还是Eclipse /命令行运行项目(代码的不同副本)。

1 个答案:

答案 0 :(得分:0)

frames = new Frames*[size];

这是错误的,“frames”变量被定义为指向Frame的指针,而不是指向Frames的指针。