【发布时间】: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时初始化已创建,所以我会usenew。还可以查看structin C++ 上的这篇文章,这可能会通过删除typedef来简化您的结构定义。 -
谢谢,我以前用过 malloc() 和 free(),我猜原因是 malloc 没有考虑每个元素内部的动态内存消耗,所以可能存在问题。现在我改回 new() 并删除 [] C.
标签: c++ matlab vector segmentation-fault mex