使用指针填充向量时出现分段错误
Segmentation fault while populating vectors using pointers
>我有一个以下形式的类:
class myClass{
vector<pair<uint64_t,uint64_t> > myvarClass;
};
main(){
vector<myClass> myVec;
myVec.resize(8);
myClass obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8;
myVec.push_back(obj1);myVec.push_back(obj2);myVec.push_back(obj3);
myVec.push_back(obj4);myVec.push_back(obj5);myVec.push_back(obj6);
myVec.push_back(obj7);myVec.push_back(obj8);
myClass* obj1Ptr=&myVec[0]; myClass* obj2Ptr=&myVec[1];
myClass* obj3Ptr=&myVec[2]; myClass* obj4Ptr=&myVec[3];
myClass* obj5Ptr=&myVec[4]; myClass* obj6Ptr=&myVec[5];
myClass* obj7Ptr=&myVec[6]; myClass* obj8Ptr=&myVec[7];
obj1Ptr->myvarClass.push_back(make_pair(938474,475575));
//populate myvarClass using obj1Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj2Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj3Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj4Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj5Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj6Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj7Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
//populate myvarClass using obj8Ptr such that the size of myvar for each class object is 4,00,000. I am not showing population of 4,00,000 myvarClass objects for brevity
}
当我使用 objptr 填充 myvarClass 时,我最终会在任意位置出现分段错误。是否有任何合理的原因。
之后:
myClass obj1;
然后obj1
包含一个未初始化的指针。所以代码:
myVec.push_back(obj1)
按值复制未初始化的变量,这会导致未定义的行为。代码中的许多位置都会出现相同的问题。
从字里行间阅读,似乎您可能会在未显示的代码中为myPointer
提供值,从而导致进一步的问题。但是,没有人可以调试您未显示的代码。
您的问题是,当您插入从 myVec 获取的指针时,可能会发生 myVec 调整大小的情况,并且指向其内容的任何指针都无效。因此你的段错误。
构建矢量时的 STL 保留预定义数量的插槽。如果您插入的元素数量超过此值,那么它将保留更多数量的插槽(通常只是两倍),并将旧插槽的内容复制到新插槽中,然后释放旧插槽。这意味着指向旧插槽的指针无效。您可以首先强制保留插槽的数量(有一个专用于此的构造函数),并克服此问题,但通常被认为是依赖以这种方式获得的指针的不良做法。以这种方式使用 std::vector 与数组相比没有优势
你的myVec大小是5,你把8个元素推入其中。这可能会导致故障
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?