【发布时间】:2017-12-15 19:09:31
【问题描述】:
我需要使用 win32 线程并行化应用程序。代码的一部分涉及使用线程修改静态数组。
我将数组作为参数传递,如下所示:
struct threadParameter {
float **array;
int row;
}
示例代码如下所示:
// Main
float data[100][100]
for (int i = 0; i < 100; i ++) {
tp = (*threadParameter) new threadParameter;
tp->array = (float **) data;
tp->row = i;
AfxBeginThread... // Begin thread code
}
// Thread Code
UINT myThread(LPVOID param) {
threadParameter *pp = (threadParameter *) param;
for (int j = 0; j < 100; j ++) {
pp->array[pp->row][j] = NEWVALUE;
}
}
但是,在执行项目时,当我尝试通过 **array 指针访问数组时出现“访问冲突错误”。如果数组数据为 动态的。有没有办法解决这个问题(我不允许将数组数据从静态更改为动态)?
【问题讨论】:
-
旁注:如果你不使用 MFC,你应该使用 _beginthreadex() 而不是 AfxBeginThread
-
正如 Mehrdad 解释的那样,只需将 'float*array' 替换为 'floatarray' 然后手动计算索引。
标签: c++ multithreading pointers winapi access-violation