- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我创建了一个结构来保存一些数据,然后声明了一个 vector 来保存该结构。
但是当我执行 push_back 时,我会遇到该死的段错误,我不知道为什么!
我的结构定义为:
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*/
};
最初,该结构没有拷贝、构造函数或析构函数。我后来在阅读下面这篇文章时添加了它们。
Seg fault after is item pushed onto STL container
但最终结果是一样的。
有一个让我非常困扰!当我第一次将一些数据插入 vector 时,一切正常。稍后在代码中,当我尝试将更多数据推送到 vector 中时,我的应用程序出现了段错误!
声明 vector
vector<Group> Groups
并且是我正在使用它的文件的全局变量。其他任何地方都没有外部人员,等等......
我可以将错误追踪到:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
在 vector.tcc 中,当我完成将最后一个元素添加/复制到 vector 时....
据我所知。我不应该需要与复制构造函数有任何关系,因为浅拷贝应该足够了。我什至没有分配任何空间(但我为要试用的字符串保留了空间)。
我不知道是什么问题!
我使用 gcc 4.1.2 在 OpenSuse 10.2 上运行这段代码
由于向后兼容性问题,我并不是真的急于升级 gcc...
此代码在我的 Windows 机器上“完美”运行。我用 gcc 3.4.5 mingw 编译它没有任何问题......
帮助!
--- ... ---
:::编辑:::
我推送数据
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);
最佳答案
正如 Neil 所说,您不需要默认构造函数、复制构造函数或析构函数:
std::string
自行清理,因此永远不需要析构函数。std::string::reserve
是不必要的,因为 std::string
将根据需要动态分配内存,但它可能提供性能优势。您发布的代码看起来是正确的(而且它看起来非常简单明了,所以很难看出哪里可能会出现错误)。因此,我怀疑您正在破坏代码中其他地方的内存并且 vector<Group>
简直就是受害者。
尝试安装 Valgrind (OpenSuse 应该为它提供一个包)并通过它运行您的应用程序(从命令行,只需运行 valgrind my-app
)以查看 Valgrind 是否可以捕获任何内存损坏。
关于c++ - vector<struct> 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739354/
我有一个数组 items[] items[] 中的每一项都是一个结构体。 item 有键 id、date、value(即 item.id、item.date、item.value) 我想使用 Stru
我想存储 100 名员工。 RollNo,姓名,工资,时间(各种数据,我无法在这里解释,但你可以看下面的代码片段来理解 main() { struct day { int hour
这个问题在这里已经有了答案: storage size of ‘names’ isn’t known (3 个答案) 关闭 5 年前。 我正在尝试蓝牙编程,遇到了这个我不明白的问题。基本上,当我使用
这是一个奇怪的事情: 我有一个结构,它包含指向相同类型结构的指针和指向其他类型结构的指针,以及一些其他值。 struct animal { struct animal * father;
我有一个结构定义如下(名称不同) struct str1 { int field1; struct str2; } 我在一个函数中有一个*str1。我想要一个指向 str2 的指针。 所以
DISK_DETECTION_INFO is defined as有什么原因吗? typedef struct _DISK_DETECTION_INFO { DWORD Size
我正在尝试打包一个字符串和一个字符串的长度。 fmt = '
我在创建结构时遇到问题。 我的结构: public struct Device: Codable { let data: DeviceData let meta: Meta? } pu
struct Item { var name:String? var type:String? var value:Int? var tag:Int? } ... ..
// NewReaderSize returns a new Reader whose buffer has at least the specified 43 // size. If the ar
这个问题在这里已经有了答案: Sorting a vector of custom objects (14 个答案) 关闭 3 年前。 在下面的 C++ 片段中, 如何基于 TwoInts 结构中的
#include struct Header { unsigned long long int alignment; }; int main(void) { struct Heade
我有一个目前看起来像这样的结构(缩写为仅显示基本部分): typedef struct { uint32_t baudrate; ... some other internally u
对此没有太多解释,这就是我所拥有的: public struct PACKET_HEADER { public string computerIp; publi
我有以下代码: struct MyStruct{ data: &'a str, } fn get(S: &'a MyStruct) -> &'a str{ S.data } fn se
struct S1 { char c; int i; }; struct S3 { char c1; struct S1 s; double c2; }; 我正
我有一个名为 Parameter 的协议(protocol): protocol Parameter { var name: String { get } var unit: Unit
有 2 个 struct 定义 A 和 A。我知道 struct A 可以包含指向 struct A 的 POINTER 但我不明白为什么 struct A 不能包含struct A(不是指针) 最佳
我有以下代码: struct MyStruct{ data: &'a str, } fn get(S: &'a MyStruct) -> &'a str{ S.data } fn se
为了说明这一点,这里有一个小的不可变结构和一个更新它的函数: (struct timeseries (variable observations) #:transparent) (define (ad
我是一名优秀的程序员,十分优秀!