簡體   English   中英

奇怪的內存行為-C ++

[英]Strange memory behaviour - 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);

有時它可以正常工作,但是在大多數情況下,它可以正常工作,直到(***)行,然后當我通過調試器,* frame,frame [1]等中的代碼通過此行時,等於5(!)或我在作業中輸入的任何其他數字。

如果我嘗試從命令行運行它,它將告訴我有關內存訪問錯誤的信息。

如我所說,我將程序簡化為極其瑣碎,仍然找不到錯誤。

任何建議/幫助都很棒!

更新:

我將代碼復制到另一台計算機(具有類似配置)上,無法在此處重現該問題。 在原始計算機上,無論我是從XCode還是從Eclipse /命令行(代碼的不同副本)運行項目,我都可以重現該問題。

frames = new Frames*[size];

這是錯誤的,“ frames”變量被定義為指向Frame指針,而不是指向Frames指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM