나는 winthreads를 사용하여 행렬을 곱하는 것을 포함하는 숙제를하고 있습니다.win32 threads in c
저는 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 예외 오류에 오류를 표시합니다. 이 오류가있는 이유는 무엇이며 어떻게 해결할 수 있습니까?
디버거를 사용해 보셨습니까? 디버거를 사용하는 방법을 배우는 것은 프로그래밍에서 중요한 기술입니다. –
"숙제 태그가 사용되지 않고 삭제 될 이유가 무엇입니까? 유용하다고 생각합니다." - 당신보다 더 똑똑한 사람/경험이 많은 사람은 그렇지 않다고 생각합니다. –
또한 공백과 들여 쓰기를 올바르게 사용해야합니다 **. furhtermore'void *'**는 모든 데이터 포인터 유형과 암시 적으로 호환되므로 캐스트하지 않아야합니다. 그리고 캐스팅의 유일한 효과는 가독성을 떨어 뜨리는 것입니다. –