我正在做一个家庭作业,涉及使用winthreads乘以矩阵。c中的win32线程
我是C中的新手,这是我所有的代码(我在这里读取了一些线程)。
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define M 3
#define K 3
#define N 3
#define NUMBER_OF_THREADS 9
int A[M][K] = { {1,4,3}, {2,5,4}, {3,6,1} };
int B[K][N] = { {8,7,6}, {5,4,3}, {7,3,1} };
int C[M][N];
clock_t start,end;
struct v
{
int i;
int j;
};
DWORD WINAPI MatrixMult(LPVOID Param)
{
int a;
DWORD sum = 0;
struct v *data = Param;
for(a = 0; a < 3; a++)
{
sum = sum + ((A[data->i][a]) * (B[a][data->j]));
}
C[data->i][data->j] = sum;
return 0;
}
int main()
{
struct v *data = malloc(sizeof(struct v));
int i, j, k;
DWORD ThreadIds[NUMBER_OF_THREADS];
HANDLE ThreadHandles[NUMBER_OF_THREADS];
int thread_index = 0;
start = clock();
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
data->i = i;
data->j = j;
ThreadHandles[thread_index] = CreateThread (NULL, 0, MatrixMult, &data, 0, &ThreadIds[thread_index]);
if (!ThreadHandles)
{
printf("Error, threads cannot be created");
return 1;
}
}
thread_index++;
}
printf("Result:\n");
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("C[%d][%d] = %f\n", i,j, C[i][j]);
}
}
for (i = 0; i < 9; i++)
{
CloseHandle(ThreadHandles[i]);
}
end = clock();
printf("Tiempo = %d", end - start);
return 0;
}
我有一些问题,这个程序,它编译,但它并没有运行,它标志着在阅读0x3468a3bc在0x775f15de例外,错误的错误。任何想法为什么这个错误是存在的,我该如何解决它?
您是否尝试过使用调试器?学习如何使用调试器是编程中至关重要的技能。 –
“为什么作业标签已被弃用并将被删除?我认为它很有用。” - 比你更聪明的人/拥有更多经验的人认为事实并非如此,这就是为什么。 – 2012-11-16 22:15:54
此外,您**必须注意正确使用空格和缩进;因为它隐式地与任何数据指针类型兼容,所以不应该抛出furhtermore void *'**,并且铸造的唯一影响是降低可读性。 – 2012-11-16 22:22:09