Привет, я столкнулся с ошибкой памяти с моим кодом. Я использовал 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 без каких-либо проблем.
Пожалуйста, помогите мне ! Благодаря !!!
Вы впервые установили, что xobj действительно?
CXmlobj *xobj = (CXmlobj *)pCmdset->at(0); // if xobj is invalid
xobj->m_name.data(); // ... then this will invoke undefined behavior
Простейшая задача - просто назначить эту строковую переменную временной переменной и посмотреть, что произойдет. Если вы по-прежнему получаете ошибку сегментации, тогда проблема более чем вероятно, что xobj не указывает на действительный CXmlobj.
Моя образованная догадка заключается в том, что m_name
имеет тип std::string
. Нет никакой гарантии, что нулевой символ завершает последовательность символов, указанную значением, возвращаемым data()
. Проще говоря, ваши отпечатки могут получить доступ к большему количеству элементов, чем фактически содержит эта строка, которая вызывает эту ошибку сегментации.
Попробуйте добавить символ \0
в конце строки или замените data()
на c_str()
который, как гарантируется, будет завершен с c_str()
.
m_name.data()
ли ошибка при печати m_name.data()
? Какой тип m_name
?
p xobj
пожалуйста, добавьте