作者Arton0306 (Ar藤)
看板C_and_CPP
標題[問題] static成員變數大小
時間Fri Nov 4 00:23:21 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
linux
問題(Question):
我有一個class XXX 裡面有個static成員
static const size_t BUFFERSIZE = 1024*1024*100;
還有一個陣列
uint8_t mBuffer[ BUFFERSIZE ];
執行時
如果改成BUFFERSIZE=1024*1024就不會當
1024*1024*100就會當
1024*1024*3不會當
錯誤結果(Wrong Output):
66 analysisFile( inputFile, inputFile + "_analysis" );
(gdb) s
std::operator+<char, std::char_traits<char>, std::allocator<char> >
(__lhs=..., __rhs=0x4056f2 "_analysis") at
/linux/depot/gcc-4.5.2/bin/../lib/gcc/x86_64-redhat-linux/4.5.2/../../../../include/c++/4.5.2/bits/basic_string.h:2303
2303 basic_string<_CharT, _Traits, _Alloc> __str(__lhs);
(gdb) n
2304 __str.append(__rhs);
(gdb) n
2306 }
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x0000000000402127 in analysisFile (aInputFileName=Cannot access memory at
address 0x7fb9bfea58
) at Analysisor.cpp:50
50 {
(gdb)
當掉的地方gdb顯示是analysisFile函式的左括號
analysisFile中會建立一個XXX物件
但不知道為什麼會當在左括號處??
而且只要系統給100MB就會當 要如何知道系統可提供多少大小呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.140.149
※ 編輯: Arton0306 來自: 220.135.140.149 (11/04 00:24)
→ tomnelson:應該要問你想知道這個大小值要幹什麼,你這種配置空間方 11/04 00:25
→ james732:改用動態配置並檢查是否配置成功? 11/04 00:26
→ tomnelson:式不是很好,不建議這樣搞. 11/04 00:26
→ james732:我也覺得這種設計挺詭異的.... 11/04 00:27
→ tropical72:那個值是 compiler 決定的, 可以設定, 但上限值並不會 11/04 00:28
→ tropical72:比動態配置來得大。 11/04 00:28
→ Arton0306:感謝!我後來改成動態的了 11/04 23:00