2017-06-17 28 views
-3

我想在C++中將靜態數值存儲到我的列表容器中。在我運行我的代碼後,這個崩潰沒有任何錯誤。也許你看到什麼是錯的? 我想客觀地創建100個值的列表,然後將隨機值添加到列表中,然後在cmd中打印出來。如何將隨機值存儲到列表中? C++

在此先感謝。

#include <cstdlib> 
#include <iostream> 
#include <list> 
#include <stdlib.h> 

using namespace std; 

class LIST 
{ 
private: 
    int *r; 
    int n; 
public: 
    LIST();   // 1 konstr 
    void input(); 
    void show(); 
}; 
// ==================================== 
LIST::LIST() // 1 konstr 
{ 
    n = 100; 
list<int> r(n); 
} 
// ==================================== 
void LIST::input() 
{ 
    r[n]; 
    for (int i = 0; i < n; ++i) { 
    r[i] = rand() % 100 + 1; 
    } 
} 
// ==================================== 
void LIST::show() 
{ 
    cout << "1D input\n"; 
    for (int i=1; i<=n; i++) 
    { 
     cout << i << " "; cout << r[i] << endl; 
    } 
    cout << "**********************************************\n"; 
} 
// ==================================== 
int main(int argc, char *argv[]) 
{ 
    LIST wow; 
      wow.input(); 
      wow.show(); 


    system("pause"); 
    return EXIT_SUCCESS; 
} 
+1

時間到(學習如何)使用調試器 – UnholySheep

+2

這是什麼'r [n];'應該這樣做? – Rakete1111

+2

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,你應該[編輯]你的問題,以包含一個[Minimal,Complete,and Verifiable](http://stackoverflow.com/help/mcve)例子來重現你的問題,以及你在調試器中所做的觀察。 –

回答

0

首先,如在πάνταῥεῖ,list r(n)的評論中所述;創建一個與成員變量r無關的局部變量,該變量保持一個未被初始化的指針。 Using an uninitialized local variable is an undefined behavior

其次,在函數LIST :: input中,您將r從0指向n-1。 在函數LIST :: show中,您嘗試訪問r從1到n。訪問越界索引也是未定義的行爲。

+1

'輸入'函數本身已經調用*未定義的行爲*,因爲'r'永遠不會被初始化 – UnholySheep

相關問題