2016-12-11 112 views
-4

運行我的程序時出現了段錯誤(核心轉儲)。第一個版本運行完美,但我需要列表作爲指針,但代碼不再工作了,看第二個代碼。我究竟做錯了什麼?C++ std :: list分段錯誤

乳寧版本:

int main(int argc, char *argv[]) { 

    std::list<int> TestList; 
    for (int i = 0; i < 10; ++i) { 
    TestList.push_back(i); 
    } 

    for (std::list<int>::const_iterator iterator = TestList.begin(), end = TestList.end(); iterator != end; ++iterator) { 
    std::cout << *iterator << std::endl; 
    } 

    return 0; 
} 

不是乳寧版本:

int main(int argc, char *argv[]) { 

     std::list<int> *TestList; 
     for (int i = 0; i < 10; ++i) { 
     TestList->push_back(i); 
     } 

     for (std::list<int>::const_iterator iterator = TestList->begin(), end = TestList->end(); iterator != end; ++iterator) { 
     std::cout << *iterator << std::endl; 
     } 

    return 0; 
}  

回答

0

由於沒有list<int>對象,所以第二個對象不能運行,而只是一個指向任意內存空間的指針。

如果要使用指針,請先分配內存區域。

0

在第二個版本中TestList只是一個指針,它不指向任何有效的列表對象。嘗試

std::list<int>* TestList = new std::list<int>(); 

請記住,您還需要在完成後正確清理堆分配的內存。