[英]cannot resize c++ std::vector that's a member variable of a class
代碼(簡體版)
(部分)類定義:
struct foo {
std::vector<int> data;
foo(int a=0):data(a+1,0) {}
void resize(int a) {
data.resize(a+1,0);
}
}
a+1
部分是因為我希望對data
進行1索引以簡化某些操作。
在全球范圍內:
int k;
foo bar;
在main
功能上:
std::cin>>k;
bar.resize(k);
稍后在main
函數中,將調用另一個訪問data
成員函數(在foo
),從而導致segmentation fault
( segsegv
)。
調試后,我發現data.size()
返回0。這是非常意外的。
經過很長時間的調試后,我非常有信心問題在於resize
,這不會造成任何問題(畢竟是來自標准庫!)。
PS不要指責我將任何內容放到全球范圍內或將公開訪問權授予班級成員。 我沒有編寫任何“真實”程序,因為我只是在參加編程比賽。
以下對我有用
#include <vector>
#include <cstdlib>
struct foo {
std::vector<int> data;
explicit foo(int a=0) : data(a+1, 0) {}
void resize(int a) {
data.resize(a+1, 0);
}
};
int main() {
foo test_foo(1);
for (size_t i = 0; i < 1000; ++i) {
int a = std::rand() % 65536;
test_foo.resize(a);
if (test_foo.data.size() != a + 1)
return 1;
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.