Я пытаюсь создать массив размером n (где n - ввод пользователя), и когда пользователь запускает программу, элементы массива должны быть установлены в 1 (каждый в отдельном потоке). Вот что я сделал до сих пор:
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <process.h>
int *x;
DWORD WINAPI init_X(LPVOID param)
{
int index = *(int *) param;
x[index] = 1;
return 0;
}
int main(int argc, char *argv[])
{
int n = atoi(argv[1]);
int i; // counter.
HANDLE THandles[n];
x = malloc(n * sizeof (int));
for(i = 0; i < n; i++)
{
THandles[i] = CreateThread(NULL, 0, init_X, &i, 0, NULL);
}
// Now wait for threads to finish
WaitForMultipleObjects(n, THandles, TRUE, INFINITE);
// Close the thread handle
for(i = 0; i < n; i++)
{
CloseHandle(THandles[i]);
}
printf("After initialization x = ");
for(i = 0; i < n; i++)
{
printf("%d ", x[i]);
if(i < n - 1) printf(" ");
}
// ...
return 0;
}
Я запустил эту программу и получил неправильные результаты:
> Test.exe 3
After initialization x = 11611536 11600064 50397186
Это должно быть After initialization x = 1 1 1
хотя. Я не уверен, как я могу это исправить, но я уверен, что это что-то связано с указателями.
P.S .: Я программист на Java, поэтому я не знаком с указателями.