[問題] 推積損毀問題
開發平台(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其實無法這樣改?
如有敘述不清請見諒,我會再補充,謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.218.165.98
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1464698322.A.E78.html
推
05/31 22:33, , 1F
05/31 22:33, 1F
推
05/31 22:37, , 2F
05/31 22:37, 2F
推
05/31 23:38, , 3F
05/31 23:38, 3F
→
05/31 23:39, , 4F
05/31 23:39, 4F
推
05/31 23:49, , 5F
05/31 23:49, 5F
→
06/01 02:49, , 6F
06/01 02:49, 6F
→
06/01 02:50, , 7F
06/01 02:50, 7F
→
06/01 02:53, , 8F
06/01 02:53, 8F
推
06/01 02:54, , 9F
06/01 02:54, 9F
→
06/01 02:55, , 10F
06/01 02:55, 10F
推
06/01 02:55, , 11F
06/01 02:55, 11F
→
06/01 02:56, , 12F
06/01 02:56, 12F
→
06/01 02:56, , 13F
06/01 02:56, 13F
→
06/01 02:56, , 14F
06/01 02:56, 14F
→
06/01 02:59, , 15F
06/01 02:59, 15F
→
06/01 02:59, , 16F
06/01 02:59, 16F
→
06/01 03:00, , 17F
06/01 03:00, 17F
→
06/01 03:00, , 18F
06/01 03:00, 18F
→
06/01 03:00, , 19F
06/01 03:00, 19F
我的確是還是使用C++編譯器,因為要改的程式頗大(對我來說
不敢一口氣將所有的東西改完,所以一點一點改
我會試試看大家提供的方法,感謝大家
然後我是要把OpenCV與Eigen寫成C沒錯...
※ 編輯: startbomb51 (61.218.165.98), 06/01/2016 09:04:38
→
06/01 14:03, , 20F
06/01 14:03, 20F
→
06/01 14:05, , 21F
06/01 14:05, 21F
推
06/01 16:03, , 22F
06/01 16:03, 22F
按照E大的方法已經可以執行了
只不過我的情形要再利用memset做初始化
或是用calloc代替
感謝大家的幫忙
※ 編輯: startbomb51 (111.82.90.200), 06/03/2016 09:17:43