CSDN上高手多,帮忙求解,Segmentation fault in unnamed block问题,谢谢
dnboy 2008-05-09 10:57:19 我定义了一个hashtable模板类,然后实例化了多个不同的hashtable (假设A、B、C、D),为A、B、C、D各自创建了一个实例a,b,c,d然后调用hashtable模板类中的buildIndex方法创建索引,其中a、c可以创建,但是b,c会core,core信息为:
p570a:/ztesoft/media/src/mediation/pretreat >dbx pretreatTest core
Type 'help' for help.
[using memory image in core]
reading symbolic information ...warning: pretreatTest.cpp is newer than pretreatTest
Segmentation fault in unnamed block in mi_hash::CHashTab<pretreat::Table_Add_Field_Cfg,pretreat::Add_Field_Cfg_HashKey,p
retreat::Add_Field_Cfg_Compare>::BuildIndex(unsigned char) at line 162 in file "mi_hash.h" ($t1)
162 m_ucMaxIndexCount = ucHashMethod+1;
(dbx) where
unnamed block in mi_hash::CHashTab<pretreat::Table_Add_Field_Cfg,pretreat::Add_Field_Cfg_HashKey,pretreat::Add_Field_Cfg
_Compare>::BuildIndex(unsigned char)(this = 0x0000000000000001, ucHashMethod = '^A'), line 162 in "mi_hash.h"
mi_hash::CHashTab<pretreat::Table_Add_Field_Cfg,pretreat::Add_Field_Cfg_HashKey,pretreat::Add_Field_Cfg_Compare>::BuildI
ndex(unsigned char)(this = 0x0000000000000001, ucHashMethod = '^A'), line 162 in "mi_hash.h"
TPretreatEngine::ReLoadData()(this = 0x000000011014f750), line 201 in "pretreat.cpp"
TPretreatEngine::Init()(this = 0x000000011014f750), line 287 in "pretreat.cpp"
TPretreatEngine::Initialize()(this = 0x000000011014f750), line 449 in "pretreat.cpp"
TAppPretreat::InitService(int,char**)(this = 0x000000011000fbf0, argc = 3, argv = 0x0ffffffffffffad0), line 164 in "TApp
Pretreat.cpp"
unnamed block in pretreatTest.main(0x300000003, 0xffffffffffffad0), line 27 in "pretreatTest.cpp"
pretreatTest.main(0x300000003, 0xffffffffffffad0), line 27 in "pretreatTest.cpp"
(dbx)
创建索引的模板为:
//创建一个索引
int BuildIndex(unsigned char ucHashMethod)
{
int iRet = MIHASH_SUCCESS;
if(ucHashMethod == 0xff)
{
return MIHASH_HASH_METHOD_TOO_LARGE;
}
if(ucHashMethod >= m_ucMaxIndexCount)
{
CHashIndex** ppHashIndex = (CHashIndex**)malloc(sizeof(CHashIndex**)*(ucHashMethod+1));
if(NULL == ppHashIndex)
{
return MIHASH_MEMEORY_ALLOC_FAILED;
}
memset(ppHashIndex,0,sizeof(CHashIndex**)*(ucHashMethod+1));
if(NULL != m_ppHashIndex)
{
memcpy(ppHashIndex,m_ppHashIndex,sizeof(CHashIndex**)*m_ucMaxIndexCount);
free(m_ppHashIndex);
}
m_ucMaxIndexCount = ucHashMethod+1; //core 在这行m_ucMaxIndexCount为unsigned char类型,此时的值为0,ucHashMethod的值为1,也是unsigned char
m_ppHashIndex = ppHashIndex;
}
else
{
if(NULL != m_ppHashIndex[ucHashMethod])
{
return MIHASH_INDEX_HAS_EXISTED;
}
}
**********//省略
};
这是在IBM AIX5.3机器上运行会core(64位机器),但是在我的windows上面(32位)运行就没有问题
而且在AIX上面表现出来是部分hashtable有问题部分没有问题(程序中有多个hashtable)
请问是怎么回事呢?