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

0

Привет, я столкнулся с ошибкой памяти с моим кодом. Я использовал 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 без каких-либо проблем.

Пожалуйста, помогите мне ! Благодаря !!!

  • 1
    p xobj пожалуйста, добавьте
  • 0
    где это добавить?
Показать ещё 2 комментария
Теги:
gdb
memory
segmentation-fault
rogue-wave

2 ответа

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
    Да, это действительный! .. Один и тот же код ведет себя по-разному в Linux и Unix?
  • 0
    Я обновил свой пост. Пожалуйста, убедитесь, что это действительно правильно, назначив эту строку во временную строку.
Показать ещё 1 комментарий
0

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

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

  • 0
    Я использовал команду strcpy вместо присвоения значения m_Function. Но проблема в том, что m_nme.data не имеет никакого значения, как кажется.
  • 0
    ой. m_name.data() ли ошибка при печати m_name.data() ? Какой тип m_name ?
Показать ещё 17 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню