[問題] 推積損毀問題

作者: 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