使用 MATLAB mex 将向量与另一个向量分配时出现分段错误
Posted
技术标签:
【中文标题】使用 MATLAB mex 将向量与另一个向量分配时出现分段错误【英文标题】:Segmentation fault when assigning vector with another vector using MATLAB mex 【发布时间】:2014-09-23 16:51:25 【问题描述】:这是执行过程中出现错误的地方:
C[check].S = vector<int>(S1);
end C 是一个全局结构数组,定义为:
typedef struct C_type
double e;
vector <int> S;
Cache;
Cache *C;
现在这个问题有时会出现分段错误错误,所以有什么提示可以解决这个问题吗? (S1
不为空,S[check].S
始终为空)。
【问题讨论】:
你不能只声明一个指针并期望它创建实际的对象...new
.
嗨,我用 C = (Cache )malloc(sizeof(Cache)*KT*T); 初始化缓存
@chappjc 所以我应该用 new 初始化每个元素?谢谢
因为这是 C++,我会使用Cache *C = new Cache[K*T*T];
(完成后不要忘记delete[] C
。vector<int> S
需要在每个 Cache
时初始化已创建,所以我会use new
。还可以查看struct
in C++ 上的这篇文章,这可能会通过删除typedef
来简化您的结构定义。
谢谢,我以前用过 malloc() 和 free(),我猜原因是 malloc 没有考虑每个元素内部的动态内存消耗,所以可能存在问题。现在我改回 new() 并删除 [] C.
【参考方案1】:
由于这是 C++,请使用 Cache *C = new Cache[K*T*T];
。 vector<int> S
需要在每个Cache
创建的时候初始化,所以use new
to accomplish this。 malloc
唯一做的就是分配字节块,但不初始化内容。
完成后别忘了delete[] C
。
还可以查看this post on struct
in C++,,它可能会通过删除typedef
来简化您的结构定义。
【讨论】:
@Coderzelf 我很高兴它有帮助。关于new
的重要一点是每个元素都会运行它的构造函数。在这种情况下,它只是初始化每个成员(对于向量成员来说并不重要)。如果您愿意,也可以随意投票! :)以上是关于使用 MATLAB mex 将向量与另一个向量分配时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章
在 MATLAB mexFunction 中,如何将 GNU 科学库矩阵和向量分配给 plhs?