память — НЕИСПРАВНОСТЬ СЕГМЕНТАЦИИ в Rougewave (только в Linux, а не в Unix)

Привет я сталкиваюсь с ошибкой памяти с моим кодом. Я использовал GDB и выяснил, где происходит сбой памяти. Но я не могу решить это. Строки кода, где происходит сбой памяти, приведены ниже. Пожалуйста, помогите мне, друзья.

void CJob::print_parm_file(){
int m_nFuncid;
CCmdset*  pCmdset = NULL;
const int size=1024;
char      fname[80];
char      dbg_buf[size]="";
unsigned int i, gotit=0;

for (i=0; i < entries(); i++)
{
pCmdset  = (CCmdset*)  at(i);

//RWCollectableString *cmdset = (RWCollectableString *)pCmdset->at(0);
//RWCString m_Function=cmdset->data();

CXmlobj *xobj = (CXmlobj *)pCmdset->at(0);

cout <<"The value of m_name.data() //segfault issue is : " << xobj->m_name << endl;
cout <<"The value of m_name.data() //segfault issue is : " << xobj->m_name.data() << endl;
RWCString m_Function=xobj->m_name.data();  //segmentation fault occurs in this line

Я напечатал значение m_name.data (), чтобы проверить его значение. Когда я попытался напечатать его значение, произошла ошибка сегментации в самих инструкциях cout.

ПРИМЕЧАНИЕ. Эта проблема возникает только на сервере Linux. Код отлично работает на Unix-сервере без каких-либо проблем.

Пожалуйста, помогите мне ! Спасибо !!!

0

Решение

Мое обоснованное предположение, что m_name имеет тип std::string, Нет гарантии, что нулевой символ завершает последовательность символов, указанную значением, возвращаемым data(), Проще говоря, ваши отпечатки могут получить доступ к большему количеству элементов, чем та строка, которая в действительности содержит эту ошибку сегментации.

Попробуйте добавить \0 символ в конце строки или заменить data() с c_str() который гарантированно обнуляется.

0

Другие решения

Вы впервые установили, что xobj действителен?

CXmlobj *xobj = (CXmlobj *)pCmdset->at(0);  // if xobj is invalid
xobj->m_name.data();   // ... then this will invoke undefined behavior

Самое простое, что можно попробовать — просто присвоить эту строковую переменную временной строковой переменной и посмотреть, что произойдет. Если вы все еще получаете ошибку сегментации, то проблема, скорее всего, в том, что xobj не указывает на действительный CXmlobj.

0

По вопросам рекламы [email protected]