C++ 奇怪的记忆行为-C++;

C++ 奇怪的记忆行为-C++;,c++,memory-management,C++,Memory Management,在一段看似简单的代码中,我遇到了一个非常奇怪的问题(为了调试的目的,我现在将其简化为这段代码): 偶尔它工作正常,但大多数情况下它工作正常,直到(***)行,然后当我通过这一行时,我可以在调试器中看到,*帧、帧[1]等变为等于5(!)或我在赋值中输入的任何其他数字 如果我尝试从命令行运行它,它会告诉我内存访问错误 正如我所说的,我将我的程序简化为极其琐碎的程序,仍然找不到错误 任何建议/帮助都会很棒 更新: 我将代码复制到另一台计算机(具有类似配置),但无法在那里重现问题。在原始计算机上,我可以

在一段看似简单的代码中,我遇到了一个非常奇怪的问题(为了调试的目的,我现在将其简化为这段代码):

偶尔它工作正常,但大多数情况下它工作正常,直到(***)行,然后当我通过这一行时,我可以在调试器中看到,*帧、帧[1]等变为等于5(!)或我在赋值中输入的任何其他数字

如果我尝试从命令行运行它,它会告诉我内存访问错误

正如我所说的,我将我的程序简化为极其琐碎的程序,仍然找不到错误

任何建议/帮助都会很棒

更新:

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


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

的指针三件事:为什么要使用指向
Frame
的指针而不是
std::vector
?那你为什么不使用初始化列表呢?为什么要在
main
函数中动态分配
Buf
对象?建议:如果您认为
Frame
类与问题无关,请将其替换为
int
,添加
main
,这样可以大大有助于诊断。这太简单了,我们无法从该代码中重现错误。请发布一个。您的代码不完整;特别是,它似乎缺少一个
main()
函数和至少一个
#include
。请输入您的代码,使其成为您问题的一部分,然后我们可以尝试复制并解决它。您还应该阅读。@Erix
std::vector
不仅仅是任何旧库的一部分,它是标准库的一部分。所有C++编译器都附带了它。它包含了很多事情,使每个C++程序员的生活变得更容易,并且使代码更容易阅读、理解和维护。如果我是一名教师,这是学校作业的一部分,而不是指针,那么我会给给给我这段代码的人一个很低的分数。没错,但很不清楚这是否是实际问题。很可能不是,因为这将是一个编译错误。我们应该等待那个MCVE。@BaummitAugen它确实是非常不清楚的,但基于给出的最少代码量,似乎是一个明显的候选。如果框架不存在,这将是一个编译错误;但是,由于我们在这里使用的是指针,而不是向量或安全指针,这取决于使用的编译器及其设置,这可能“只是”一个警告,但编译很好。然而,如果sizeof(Frames)Frame**
Frames*
中的
new[]
表达式。注意额外的“s”。一开始也误读了。另外,“如果sizeof(Frames)sizeof(Frame*)!=sizeof(Frames*)这是一个问题,至少这是不常见的。
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; // (***)
}
Buf* buf =  new Buf(50);
frames = new Frames*[size];