Multithreading 对象地址突然改变 类测试 { void thread1() { int i=0; while(true){ for(无符号整数k=0;k
最有可能的情况是,您引用的对象在调用C时被销毁,这表明存在同步问题。您需要延长线程引用的对象的生存期,直到线程完成其例程的执行。要实现这一点,您可以使用以下方法:Multithreading 对象地址突然改变 类测试 { void thread1() { int i=0; while(true){ for(无符号整数k=0;k,multithreading,c++11,segmentation-fault,Multithreading,C++11,Segmentation Fault,最有可能的情况是,您引用的对象在调用C时被销毁,这表明存在同步问题。您需要延长线程引用的对象的生存期,直到线程完成其例程的执行。要实现这一点,您可以使用以下方法: #包括 #包括 #包括 结构foo{ void callback1(){ 用于(自动和电气:存储){ 元素+=5; } } void callback2(){ 用于(常量自动和元素:存储){ std::你不能没有锁定。请添加你用于线程的代码。请检查此项。请发布一个。请阅读此项:@n.m.无需苛刻,我在手机中,直到现在才意识到。@n.m
#包括
#包括
#包括
结构foo{
void callback1(){
用于(自动和电气:存储){
元素+=5;
}
}
void callback2(){
用于(常量自动和元素:存储){
std::你不能没有锁定。请添加你用于线程的代码。请检查此项。请发布一个。请阅读此项:@n.m.无需苛刻,我在手机中,直到现在才意识到。@n.m.这是一个答案吗亲爱的先生?希望你现在高兴:)这当然是一个答案:)
class test
{
void thread1()
{
int i = 0;
while(true){
for(unsigned int k = 0;k < mLD.size(); k++ )
{
mLD[k] = i++;
}
}
}
void thread2()
{
std::cout << "thread2 address : " << &mLD << "\n";
C();
}
void B()
{
std::cout << "B address : " << &mLD << "\n";
for(unsigned int k = 0;k < mLD.size(); k++ )
{
if(mLD[k]<=25)
{
}
}
}
void C()
{
B();
std::cout << "C address : " << &mLD << "\n";
double distance = mLD[0]; // <---- segmetation fault
}
std::array<double, 360> mLD;
};