Tôi đã tạo cấu trúc để giữ một số dữ liệu và sau đó khai báo một vectơ để giữ cấu trúc đó.segfault trên vector <struct>
Nhưng khi tôi thực hiện push_back, tôi nhận được sự phân đoạn chết tiệt và tôi không biết tại sao!
struct của tôi là định nghĩa như sau:
typedef struct Group
{
int codigo;
string name;
int deleted;
int printers;
int subpage;
/*included this when it started segfaulting*/
Group(){ name.reserve(MAX_PRODUCT_LONG_NAME); }
~Group(){ name.clear(); }
Group(const Group &b)
{
codigo = b.codigo;
name = b.name;
deleted = b.deleted;
printers = b.printers;
subpage = b.subpage;
}
/*end of new stuff*/
};
Ban đầu, struct không có sao chép, nhà xây dựng hoặc destructor. Tôi đã thêm chúng sau khi tôi đọc bài đăng này bên dưới.
Seg fault after is item pushed onto STL container
nhưng kết quả cuối cùng giống nhau.
Có một điều khiến tôi phiền lòng! Khi tôi lần đầu tiên đẩy một số dữ liệu vào vectơ, mọi thứ đều ổn. Sau này trong mã khi tôi cố gắng đẩy thêm một số dữ liệu vào vectơ, ứng dụng của tôi chỉ là segfaults!
Các vector được khai báo
vector<Group> Groups
và là một biến toàn cầu đến file mà tôi đang sử dụng nó. Không externs bất cứ nơi nào khác, vv ...
tôi có thể theo dõi các lỗi:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
trong vector.tcc khi tôi xong việc thêm/sao chép các yếu tố cuối cùng để các vector ....
Theo như tôi có thể nói. Tôi không nên cần bất cứ điều gì để làm với một nhà xây dựng bản sao như là một bản sao nông nên là đủ cho việc này. Tôi thậm chí không phân bổ bất kỳ không gian nào (nhưng tôi đã dự trữ chuỗi để thử).
Tôi không biết vấn đề là gì!
Tôi đang chạy mã này trên OpenSuse 10.2 với gcc 4.1.2
Tôi không thực sự để mong muốn nâng cấp gcc vì các vấn đề tương thích ngược ...
Mã này làm việc "một cách hoàn hảo" trên máy tính của tôi. Tôi biên soạn nó với gcc 3.4.5 mingw mà không có bất kỳ vấn đề nào ...
trợ giúp!
--- ... ---
::: EDIT :::
Tôi đẩy dữ liệu
Group tmp_grp;
(...)
tmp_grp.name = "Nova ";
tmp_grp.codigo=GetGroupnextcode();
tmp_grp.deleted=0;
tmp_grp.printers=0;
tmp_grp.subpage=0;
Groups.push_back(tmp_grp);
Các mã đẩy nó vui lòng. –
struct struct của bạn không cần constructor sao chép, và nó là một ý tưởng tồi để cung cấp nó - constructor sao chép mặc định làm mọi thứ bạn cần. Bạn cũng không cần typedef trên struct.Nó cũng không cần destructor, và có lẽ không phải là constructor có kích thước. –
@Neil. Tôi biết! Tôi đã thêm chúng vào "tuyệt vọng" –