将内存分配给结构向量的指针时出现 SEG FAULT
Posted
技术标签:
【中文标题】将内存分配给结构向量的指针时出现 SEG FAULT【英文标题】:SEG FAULT while assigning memory to the pointer of vector of structs 【发布时间】:2012-11-14 23:36:33 【问题描述】:struct LeafDataEntry
void *key;
int a;
;
int main()
//I want to declare a vector of structure
vector<LeafDataEntry> leaves;
for(int i=0; i<100; i++)
leaves[i].key = (void *)malloc(sizeof(unsigned));
//assign some value to leaves[i].key using memcpy
我在上面的 for 循环中执行 malloc 时收到此代码的 SEG FAULT 错误....任何有关将内存分配给结构向量中的指针的替代方法的建议。
【问题讨论】:
向量如何知道它应该包含 100 个元素? 你的key
最终会存储什么类型的数据?
@KerrekSB,天哪,我喜欢这个链接。现在很容易记住。
@KerrekSB:很有趣,因为在这种情况下是使用std::vector
导致了段错误......
@Anonymous - 问题是leaves[i]
不存在。到目前为止提供的两个答案解决了这个问题。
【参考方案1】:
这是因为您试图分配给一个还没有元素的向量。改为这样做:
for(int i=0; i<100; i++)
LeafDataEntry temp;
leaves.push_back(temp);
leaves[i].key = (void *)malloc(sizeof(unsigned));
//assign some value to leaves[i].key using memcpy
这样您将访问实际内存。
在 cmets 中,OP 提到数组中元素的数量将在运行时决定。您可以设置i < someVar
,这将允许您在运行时决定someVar
和列表的大小。
另一个答案
leaves.resize(someVar) //before the loop
可能是一种更好的方法,因为它可能会更有效率。
【讨论】:
【参考方案2】:您正在索引一个空向量。尝试使用
leaves.resize(100);
在循环之前。
【讨论】:
以上是关于将内存分配给结构向量的指针时出现 SEG FAULT的主要内容,如果未能解决你的问题,请参考以下文章
使用 MATLAB mex 将向量与另一个向量分配时出现分段错误
WordPress安装时出现问题:Parse error: syntax error, unexpected end of file in