2017-02-04 45 views
-3

我是新編程C++,請耐心等待:)我的問題是模型(a DGVM)運行直到結束,但是我收到的最後一條消息是「malloc:*對象0x10003b3c4錯誤:釋放指針未分配 *在malloc_error_break中設置斷點以進行調試」。調試器指向該:對象0x10003b3c4的malloc:***錯誤:被釋放的指針未分配***在malloc_error_break中設置斷點以進行調試

clTreePop::~clTreePop() {free(Trees);} 

調試器指向free(Trees)並給出了消息: 「EXC_BAD_INSTRUCTION(代碼= EXC_i386_INVOP,子碼=爲0x0)」。我究竟做錯了什麼?謝謝。

的代碼,可能是這個問題的重要的組成部分:

void clTreePop::addFirstTree(double init_mass) 
{ 
    clTree Tree(init_mass, -1. , pop_size_, count_trees_); 

    Trees = (clTree *) malloc(sizeof(clTree)); 

    Trees[0] = Tree; 
    pop_size_ ++; 
    new_born_ ++; 
    count_trees_ ++; 
    root_biomass_ += Tree.getBr(); 
    stem_biomass_ += Tree.getBS(); 
    leaf_biomass_ += Tree.getBl(); 
    canopy_area_ += Tree.getCanopyArea(); 
    gc_weighted_ += Tree.getGc(); 
    max_height_ += MyMax(max_height_,Tree.getHeight()); 
    basal_area_ += Tree.getStemArea(); 

    return; } 
+0

請編輯您的問題以提供[mcve]。 –

+4

不要在C++中使用'malloc'。 –

回答

1

首先在C++中,您不需要使用malloc,作爲分配可以在不同勢來完成的,更好的,和如果沒有,至少更簡單的方法。 Malloc是一種古老的低級C(不是C++)方式。嘗試使用

clTree *Trees = new clTree; 

的代碼複製並不能完全顯示的情況下,g雖然我可以看到的是,代替

Trees = (clTree *) malloc(sizeof(clTree)); 

你應該使用:

clTree *Trees = (clTree *) malloc(sizeof(clTree)); 

這樣你創建一個指向,然後你附加你分配的結構。

錯誤「EXC_BAD_INSTRUCTION(code = EXC_i386_INVOP,subcode = 0x0)」表示您的代碼與您的計算機(處理器,系統等)體系結構之間存在某種不兼容性。我不知道這件事,但我認爲這是我之前列出的錯誤造成的。

+0

感謝您的回答!我嘗試了你建議的兩個代碼,但是它指出了其他錯誤......我想問題在於你說的不兼容,因爲模型是舊的,但在我更新操作系統(MacOS Sierra)和Xcode(8.2 (8C38))... – Karol

相關問題