作者osiris1 (dennis)
看板C_and_CPP
标题[问题] C和C++语法混用出现一些怪怪的bug
时间Tue Jul 21 01:50:34 2009
请问一下版上有经验的各位
目前小弟是在改一个程式 这个程式全部是用C的语法在写
我是打算用C++去extend 但出现了很多以前没有遇过的bug
不知道是不是因为混用的问题
例如:在用vector的时候不先reverse的话 push_back一定会segmentation fault
或是在malloc的时候也会segmentation fault
不知道版上的各位是否有遇过相同的问题或是有什麽建议??
-------------------------------------------------------
重新讲仔细一点
struct Tree
{
int id ;
Tree* left ;
Tree* parent ;
Tree* right ;
int* vArray;
}
在parser.cpp里面我使用宣告了一个 extern vector<int> vec 并写入了正确的资料
在metis.cpp里面include <parser.cpp> 也宣告了一个 extern vector<int> vec
想在metis.cpp用刚刚parse完的结果
但在还没使用这个 vec 的时候 先跑
//**Tree ------> global pointer
//先动态allocateTree的Mem空间(有写constructor)
Tree* itree ;
Tree* curTPtr ;
sliceTree = new Tree* [numLayer] ;
itree = new Tree [numLayer*n] ;
curTPtr = itree ;
for( i=0 ; i<numLayer ; ++i )
{
*(sliceTree+i) = curTPtr ;
curTPtr += n ;
}
//跑两个回圈去更改vArray的值
for( i=0 ; i<numLayer ; ++i )
{
sliceTree[i][0].vArray = new int[size] ;
for( j=0 ; j<numBlock+numPad ; ++j )
{
if( blocks[j].layer == i )
{
sliceTree[i][0].vArray[ivArray] = -1 ;
ivArray++ ;
{
}
}
跑完以後发现他改的不是vArray的值
改到的却是我parse完以後的 extern vector<int> vec 里面的值
先谢谢看到这里的各位大大 因为内容有点长
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.37.134.141
2F:→ osiris1:可是我改成用new之後 程式还是会乱改其他不该变动的MEM 07/21 14:49
※ 编辑: osiris1 来自: 140.114.75.128 (07/21 15:09)
3F:推 zlw:提供资讯不足 07/21 17:27
※ 编辑: osiris1 来自: 114.37.133.10 (07/21 20:38)
※ 编辑: osiris1 来自: 114.37.133.10 (07/21 20:56)
4F:推 zlw:你的sliceTree型态应该是Tree**吧?那麽假设numLayer=2; 你有 07/21 21:35
5F:→ zlw:对 sliceTree[0]及sliceTree[1]做new吗?另外,vArray哪来的? 07/21 21:35
6F:→ zlw:在 struct Tree 里面并无 vArray,是吧? 07/21 21:36
7F:→ osiris1:vArray是打错了 因为里面有很多个ptr都要作new的动作 07/21 22:27
8F:→ osiris1:我只列了一个出来 07/21 22:28
※ 编辑: osiris1 来自: 114.37.133.10 (07/21 22:28)
9F:→ osiris1:对sliceTree[0] sliceTree[1]作new是没错的 07/21 22:29