[英]SEGMENTATION FAULT in C++ - Rougewave (only in linux and not in 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服務器上運行完美,沒有任何問題。
請幫我 ! 謝謝 !!!
我的有根據的猜測是m_name
的類型為std::string
。 不能保證空字符會終止由data()
返回的值所指向的字符序列。 簡而言之,您的打印可能會訪問比該字符串實際包含的元素更多的元素,這會導致分段錯誤。
嘗試在字符串末尾添加\\0
字符,或將data()
替換為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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.