凌晨 5:00 的肮脏黑客。我犯了罪,所以,通过使用 FIFO 在同一进程的线程之间传递指针的地址:

total_buf = (char*)malloc(msize); 
// ... 
long addr = (long)&total_buf; 
// ... 
write(fifo, buf, 128); 

在接收器线程中接收到指向 total_buf 的指针后,void* pt = (void*)addr;char* tbuf = (char*)pt; 我注意到缓冲区内容发生了变化,这很明显通过检查内存内容确认:(gdb) x/1024xb tbuf

发生这种情况的可能原因是什么 - 在多线程 Qt + 纯 pthreads 应用程序的插件试图直接通信的上下文中?出于某种原因,我觉得这不是一些明显的垃圾收集而且公平,Linux 线程正在使用共享进程内存,所以它没有地址不匹配,指针取消引用看起来也不错。

请您参考如下方法:

我猜你应该试试:

long addr = (long)total_buf; /* removed & */ 

...因为您稍后首先将 addr 转换为 void*,然后再转换为 char*。您的版本中的 addr 是指向指针的长版本,而不是指向缓冲区的长版本指针。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!