簡體   English   中英

C ++分配段錯誤

[英]C++ allocation segfault

我有這個代碼:

size_t count = new_data.size();
std::cout << "got the count: " << count << std::endl;
double g_x[count];
std::cout << "First array done\n";
double g_y[count];
std::cout << "Allocated array of size" << count << std::endl;

這給了我輸出:

got the count: 1506538
Segmentation fault: 11

老實說,我不明白為什么。 它適用於另一個數據集,但不適用於此數據集。

你可能只是在這里得到一個堆棧溢出。 嘗試動態分配內存,即使用堆。

double* g_x = new double[count];
...
delete[] g_x;

更好的解決方案是使用std::vector<>

#include <vector>

...

std::vector<double> g_x(count); // Creates vector with the specified size.

如果需要動態大小的數組,則需要使用new創建它,或使用其中一個STL容器。

看一下靜態數組與C ++中動態數組的一些答案

你的問題是在C和C ++數組中按照定義在編譯時定義,所以你做的是錯誤的,這個代碼甚至編譯很奇怪(編譯器應該尖叫你)

但是,如果您需要一個運行時定義的數組,您應該使用std :: vector或手動分配內存(如果您沒有非常具體的需求,則不會推薦)

PS你應該檢查你的編譯器警告級別和詳細程度,因為這個代碼有嚴重的缺陷,所以它甚至不應該編譯(如果你的警告級別很低等,這對你也有害,因為你可能因為你可能會遇到一些不良的編碼習慣正在使用非語言編譯器特定的語言擴展,這會在改變環境時讓你發瘋

暫無
暫無

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

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