日期:2014-05-16  浏览次数:20791 次

linux程序里内存访问错误
Program terminated with signal 11, Segmentation fault.
#0 0x08048e31 in rfid::reader(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&) ()


120 int rfid::reader(string &str)
121 {
122 unsigned char epc[13];
123 int ret,i;
124 char card_num[7];
125 char ID[19];
126 
127 ret=(*SingleTagIdentify)(m_hcomm,4,epc);
128 if (ret)
129 return 0;
130 
131 for(i=0;i<3;i++)
132 sprintf(card_num+2*i,"%02X",epc[i]);
133 for(i=0;i<9;i++)
134 sprintf(ID+i*2,"%02X",epc[i+3]);
135 
136 str=card_num;
137 str+=ID;
138 return 1;
139 
140 }


各位请帮我看看这个问题到底出现在哪里啊?


------解决方案--------------------
学着你的程序,自己补了一个假的SingleTagIdentify,拷贝12个字节到epc,运行一下,一切正常。所以问题很有可能还是出在
ret=(*SingleTagIdentify)(m_hcomm,4,epc);
这一行,自己调试一下吧,尤其关注一下SingleTagIdentify和m_hcomm是否都有效。以及SingleTagIdentify所指向的函数在实现上会不会有问题。
------解决方案--------------------
如果,全世界 的程序背叛了你,至少还有 Valgrind 为你背叛整个世界。

用 valgrind 跑一下看看哪里内存访问错误吧。