c++ - 删除 pthread_t*

标签 c++ pthreads

我写了一个小的 pthread 多线程编程,我想清理我创建的 pthred_t 数组。但是当我这样做时,我得到了一个 glib 已被检测到的错误。我怎样才能删除数组,或者我根本不需要。代码在没有释放内存的情况下运行良好,但在我看来,下面的代码会导致(小)内存泄漏。 谢谢

pthread_t* threadNumber = new pthread_t (4);
args var;
var.matrixA=matrixA;
var.matrixB=matrixB;
var.matrixC=matrixC;
var.alpha=alpha;
var.beta=beta;
var.cellCount=0;
var.maxCells=cColumns*cRows;

for (int i =0 ;i<4;++i)
  pthread_create(&threadNumber[i],&attr,matrixMultiply,(void *) (&var));

for(int i=0;i<4;++i)
  pthread_join(threadNumber[i],NULL);

printMatrix(matrixA,aRows,aColumns);
printMatrix(matrixB,bRows,bColumns);
printMatrix(matrixC,cRows,cColumns);

//delete threadNumber;
//this caused a memory trash

最佳答案

你需要方括号来创建数组:

不是这个:

pthread_t* threadNumber = new pthread_t (4);
//                                      ^ ^

但这是正确的:

pthread_t* threadNumber = new pthread_t [4];
//                                      ^ ^

您的版本是一个初始化为 4 的 pthread_t 变量 - 无论此 4 在此上下文中意味着什么 - 因为 pthread_t 是不透明类型。

因此,对于错误的版本,您应该使用 delete threadNumber 删除,正确的版本使用 delete [] threadNumber 删除

关于c++ - 删除 pthread_t*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108886/

相关文章:

c++ - 将两个 uint8_t 转换为 int16_t 的正确现代方法

c - 多线程共享文件的读访问: pthreads

c - 增加 pthreads 线程数对速度没有影响

c - 在终止的线程上调用 pthread_cancel() 是否安全?

c++ - 停止所有 C++ 线程

c++ - LoopPass 可加载模块的 undefined symbol

c++ - C++如何链接模板实例

c++ - OpenGL : drawing line using degenerate triangle

C++ 替代模板化数据成员

c++ - 混合 pthread.h 和 C++11 标准库线程功能是否安全?