2014-05-07 85 views
0

對不起,但我想現在我已經理解了堆棧和堆,但顯然我錯了。我宣佈堆中的每個對象,但都是一樣的,當第一梅託德做我可以通過的std ::法院的時間是ZERO看,那就是:儘管在堆上分配了值,但數值被破壞了

startTPtr: 00:00:00 

當時間的函數內的印刷好吧,但不知何故它會在函數結束後被銷燬。

我錯過了這裏至關重要的東西嗎?我應該從函數返回指針嗎?

在此先感謝!

int main() { 

    Clock *_clockPtr = new Clock(); 

    MyTime *_startTPtr = new MyTime(); 
    MyTime *_endTPtr = new MyTime(); 

    char *ch = new char[100]; 

    start_app(_startTPtr, _endTPtr, _clockPtr, ch); 

    cout << "startTPtr: " << *_startTPtr << endl; 

return 0; 
} 

void start_app(MyTime *_startTPtr, MyTime *_endTPtr, Clock *clock, char *ch) { 

    cout << "Press ENTER to start and finish!"; 
    int newLine = 0; 
    for (std::string line; std::getline(std::cin, line);) { 

    if (newLine == 0) { 
     std::cout << "... "; 
     MyTime* myTime1 = new MyTime(clock->give_me_the_time()); 
     _startTPtr = myTime1; 
     cin >> ch; 
    } else { 
     MyTime* myTime2 = new MyTime(clock->give_me_the_time()); 
     _endTPtr = myTime2; 
     break; 
    } 
    cout << "startTPtr: " << *_startTPtr << endl; 
    newLine++; 
} 
} 
+0

[按引用傳遞動態無功的指針(HTTP的可能重複: //stackoverflow.com/questions/18722208/passing-pointer-of-dynamic-var-by-reference)或http://stackoverflow.com/questions/23250284/scope-of-heap-memory – hmjd

回答

3

如果你想改變一個函數的參數,並把它體現在函數的調用者,你需要參考來傳遞參數。否則,參數是複製,您只能更改副本。

在你start_app功能要更改都_startTPtr_endTPtr所以你需要將它們傳遞爲指針引用MyTime

void start_app(MyTime *&_startTPtr, MyTime *&_endTPtr, Clock *clock, char *ch) { ... } 
+0

感謝:-)。 。會在5分鐘內接受 – anders88

+0

可以替代做一個明確的複製構造函數嗎? – anders88

相關問題