我一直在尝试将short int *
,一个短整数数组传递给std::thread
,但数组已经损坏,或者没有直接传入线程..
为什么?数组的名称是指向第一个单元格的指针,所以我猜它是通过引用传递的,对吗?
这是我的代码:
short int waveIn[NUMPTS];
// doing sutff with the array
std::thread t1(toString, waveIn);
t1.detach();
和线程函数:
void toString(short int *waveIn)
{
// doing stuff with the array
}
但是所有的数组单元格都是-1308,我在将数组传递给线程之前检查过,数组单元格中有些东西......
我的问题是什么?
谢谢!
答案 0 :(得分:2)
当线程waveIn
尝试使用它时,数组t1
是一个局部变量,可能超出了范围(因此堆栈上的空间将被回收用于其他目的)。
答案 1 :(得分:2)
将指针传递给本地数组,该数组在离开作用域时被释放。因此,在线程访问它之前,可以重用该数组的内存。
您可以将数组的数据复制到std :: vector(或使用std :: vector开头)并将其移动到线程。这样,数据将保留,直到线程处理向量为止。
答案 2 :(得分:2)
而不是
short int waveIn[NUMPTS];
使用动态分配:
short int *waveIn = new int[NUMPTS];
在分离了hild线程之后,不要忘记解除分配,因为:
delete [] waveIn;