簡體   English   中英

C ++中的分段錯誤-Rougewave(僅在linux中而不在unix中)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM