[问题] 推积损毁问题

楼主: startbomb51 (~森林之熊~)   2016-05-31 20:38:40
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
OpenCV, Eigen
问题(Question):
由于某些关系,需要把C++的程式转成纯C语言
所以需要把原本一些类别转为结构
遇到new的时候不太会处理,在new的那一行已经卡了3天了orz
错误结果(Wrong Output):
执行过程中发生堆积损毁
程式码(Code):(请善用置底文网页, 记得排版)
//以下struct原本均为class
struct SupportPattern
{
Eigen::VectorXd x[100];
FloatRect yv[100];
int y;
int refTop;
int yvTop;
};
struct LaRank
{
.
.
.
//原本struct SupportPattern* m_sps[20];
struct SupportPattern* m_sps;
.
.
.
};
/*在初始化函数里有做分配内存的动作
**...
**rank是LaRank的结构
**rank->m_sps =
** (struct SupportPattern*)malloc(20 * sizeof(struct SupportPattern));
**...
*/
发生错误的函数
void Update(struct LaRank* rank)
{
原先有一个SupportPattern *sp = new SupportPattern的动作
sp->y = y;
sp->yvTop = 0;
sp->refTop = 0;
最后将sp指定给rank->m_sps[i] = sp;
后来改成结构后直接指定,ex:
rank->m_sps[i].y = y;
rank->m_sps[i].yvTop = 0;
rank->m_sps[i].refTop = 0;
.
.
.
}
执行后就发生问题堆积损毁的情形
我在想是不是指定内存大小那边就有问题?
因为rank->m_sps[1]似乎就取不到东西
或是new其实无法这样改?
如有叙述不清请见谅,我会再补充,谢谢
作者: wtchen (没有存在感的人)   2016-05-31 22:33:00
....我看不太懂说, 为啥纯C里会有new? 不是应该用malloc?抱歉我看漏了
作者: CaptainH (Cannon)   2016-05-31 23:38:00
真有必要把C++改C?很难喔!用extern "C" 包装一下接口比较好
作者: descent (“雄辩是银,沉默是金”)   2016-05-31 23:49:00
可以用 c++ compile to obj, 再 link obj
作者: EdisonX (卡卡兽)   2016-06-01 02:49:00
原本是 struct SupportPattern* m_sps[20] ; 和你后面配置的 20 * sizeof(struct SupportPattern) 有所不同 , 若你是想将 OpenCV 改成纯 C 的话... 保重!
作者: bibo9901 (function(){})()   2016-06-01 02:54:00
我真好奇为何你struct 里 Eigen:: 那行可以通过编译或许你还是用C++ compiler (?) 这样的话你到底想做什么
作者: EdisonX (卡卡兽)   2016-06-01 02:55:00
@bibo9901 , 我猜他没把副档名改成 .c ? (vc 编译器)你原本的做法应该是要先配置好 20 个 pointer , 再用每个pointer 往下配置出实际 SupportPattern.
作者: bibo9901 (function(){})()   2016-06-01 02:56:00
对啊 ..连code原本的意思都没弄清楚
作者: EdisonX (卡卡兽)   2016-06-01 02:59:00
struct SupportPattern ** m_sps;rand->m_sps=(T**)malloc(20*sizeof(SupportPattern*));for(i = 0; i < 20 ; ++i)rand->m_sps[i]=(T*)malloc(sizeof(SupportPattern);大概是这样吧,上面的 T 自己换成 struct name.
作者: bibo9901 (function(){})()   2016-06-01 14:03:00
XDD RIP期待你用C做出 expressio template
作者: damody (天亮damody)   2016-06-01 16:03:00
选对的工具 别创新工具 除非是做兴趣的

Links booklink

Contact Us: admin [ a t ] ucptt.com