C++中的分段错误 - Rougewave(仅在Linux中而不是在Unix中)

SEGMENTATION FAULT in C++ - Rougewave (only in linux and not in unix)

本文关键字:Unix Linux 分段 错误 C++ Rougewave 仅在      更新时间:2023-10-16

嗨,我的代码面临内存错误。我使用了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服务器中运行良好,没有任何问题。

请帮助我!谢谢!!!

我有根据的猜测是m_name属于std::string型。不能保证空字符会终止由 data() 返回的值所指向的字符序列。简而言之,您的打印件可能会访问比该字符串实际包含的更多的元素,从而导致此分割错误。

尝试在字符串末尾添加字符,或将data()替换为保证以 null 结尾的 c_str()

你首先确定 xobj 是有效的吗?

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

最简单的尝试是将该字符串变量分配给临时字符串变量,然后看看会发生什么。 如果仍然出现分段错误,则问题很可能是 xobj 未指向有效的 CXmlobj。