C++ pthread windows崩溃C++;
我想用一个线程创建一个长度为50的数组,完成后,我想用第二个线程每隔X秒打印一些第一个值。同时,第一个线程可以计算下一个数组 在我尝试将计算数组中的一些值复制到一些临时变量中之前,线程都是功能性的。我没有编译错误,但是当我运行程序时,我得到了一个windows崩溃消息 没有线程的double*newarray()功能正常。返回手动分配并填充数据的数组 我错过了什么 线程1:C++ pthread windows崩溃C++;,c++,arrays,windows,multithreading,pthreads,C++,Arrays,Windows,Multithreading,Pthreads,我想用一个线程创建一个长度为50的数组,完成后,我想用第二个线程每隔X秒打印一些第一个值。同时,第一个线程可以计算下一个数组 在我尝试将计算数组中的一些值复制到一些临时变量中之前,线程都是功能性的。我没有编译错误,但是当我运行程序时,我得到了一个windows崩溃消息 没有线程的double*newarray()功能正常。返回手动分配并填充数据的数组 我错过了什么 线程1: double *newarray(); void *computingU(void *) { doubl
double *newarray();
void *computingU(void *)
{
double * U_tmp;
while (true)
{
pthread_mutex_lock( &mutexU );
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
while (!Usent);
Usent = false;
memcpy(Ucmd,U_tmp,sizeof(double)*Ulenght);
pthread_mutex_unlock( &mutexU );
Ucomputed = true;
}
}
线程2:
void *sendingCMD(void * ) {
double * U_tmp;
while (true)
{
while (!Ucomputed);
Ucomputed = false;
pthread_mutex_lock( &mutexU );
memcpy(U_tmp,Ucmd,sizeof(double)*Ulenght);
pthread_mutex_unlock( &mutexU );
Usent = true;
for (int i = 0; i<Ulenght; i++)
{
printf("i= %d, u= %f", i, U_tmp[i]);
sleep(sleepTime) ;
}
}
}
void*sendingCMD(void*){
双*U_tmp;
while(true)
{
而(!u计算);
uComputerd=假;
pthread_mutex_lock(&mutexU);
memcpy(U_tmp、Ucmd、sizeof(双倍)*Ulenght);
pthread_mutex_unlock(&mutexU);
Usent=真;
对于(int i=0;i让我们取computingU
函数中的第一个线程,这里有一个局部变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
稍后将使用此变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
但是在任何地方都不能初始化变量,因此它不会指向任何东西。由于未初始化(非静态)的局部变量具有不确定的值,因此指针U_tmp
将指向一个看似随机的位置。在那里写入将导致崩溃,而且很可能导致崩溃
另一个线程也有同样的问题。让我们在computingU
函数中取第一个线程,这里有一个局部变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
稍后将使用此变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
但是在任何地方都不能初始化变量,因此它不会指向任何东西。由于未初始化(非静态)的局部变量具有不确定的值,因此指针U_tmp
将指向一个看似随机的位置。在那里写入将导致崩溃,而且很可能导致崩溃
另一个线程也有同样的问题。让我们在computingU
函数中取第一个线程,这里有一个局部变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
稍后将使用此变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
但是在任何地方都不能初始化变量,因此它不会指向任何东西。由于未初始化(非静态)的局部变量具有不确定的值,因此指针U_tmp
将指向一个看似随机的位置。在那里写入将导致崩溃,而且很可能导致崩溃
另一个线程也有同样的问题。让我们在computingU
函数中取第一个线程,这里有一个局部变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
稍后将使用此变量:
double * U_tmp;
memcpy(U_tmp,newarray(),sizeof(double)*Ulenght);
但是在任何地方都不能初始化变量,因此它不会指向任何东西。由于未初始化(非静态)的局部变量具有不确定的值,因此指针U_tmp
将指向一个看似随机的位置。在那里写入将导致崩溃,而且很可能导致崩溃
在另一个线程中也有同样的问题。请看:
double * U_tmp;
您从未将指针设置为指向任何对象,然后尝试将memcpy()数据插入其中。每次都会100%崩溃。如果不这样做,您的操作系统将被破坏。请查看:
double * U_tmp;
您从未将指针设置为指向任何对象,然后尝试将memcpy()数据插入其中。每次都会100%崩溃。如果不这样做,您的操作系统将被破坏。请查看:
double * U_tmp;
您从未将指针设置为指向任何对象,然后尝试将memcpy()数据插入其中。每次都会100%崩溃。如果不这样做,您的操作系统将被破坏。请查看:
double * U_tmp;
您从未将指针设置为任何对象,然后尝试使用memcpy()数据。每次都会100%崩溃。如果不这样做,您的操作系统就会损坏。为什么在computingU
中锁定互斥锁两次?这是我在cpy代码时的错误。为什么在computingU
中锁定互斥锁两次?这是我在cpy代码时的错误。为什么在computingU
中锁定互斥锁两次?这是我在cpy处理代码时犯的错误。为什么在computingU
中锁定互斥锁两次?这是我在cpy处理代码时犯的错误。不能保证它会崩溃。这很有可能。它会在100%的时间内破坏堆栈,因为局部变量的总内存大小是