предупреждение о присвоении
motors_and_a.allmotors = all_motors;
недопустимо, поскольку all_motors
является motor* [2]
, а не motor*
, как ожидается motors_and_a.allmotors
, поэтому использование после не определено
Вы должны указать только один двигатель * вместо массива двигатель * или изменить определение argstruct наиметь struct motor **allmotors;
и, конечно, его использование
Потому что
// HERE I GET STUCK
struct motor *motors = arguments->allmotors;
// set test_motor2 status to 1
Я полагаю, вы хотите:
typedef struct argstruct{
int *vect;
struct motor ** allmotors; /* MODIFIED */
} args;
void *test(void *arg){
struct argstruct *arguments = arg;
int *a_array = arguments->vect;
a_array[0] = 80;
struct motor ** motors = arguments->allmotors; /* MODIFIED */
motors[1]->motor_status = 1; /* MODIFIED */
return 0;
}
Остальное не изменилось.
Компиляция и выполнение:
pi@raspberrypi:~ $ gcc -g -pedantic -Wextra -Wall m.c -lpthread
pi@raspberrypi:~ $ ./a.out
a[0]: 80
Status of test_motor2: 1
выполнение под valgrind :
pi@raspberrypi:~ $ valgrind ./a.out
==4083== Memcheck, a memory error detector
==4083== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==4083== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==4083== Command: ./a.out
==4083==
a[0]: 80
Status of test_motor2: 1
==4083==
==4083== HEAP SUMMARY:
==4083== in use at exit: 0 bytes in 0 blocks
==4083== total heap usage: 2 allocs, 2 frees, 1,160 bytes allocated
==4083==
==4083== All heap blocks were freed -- no leaks are possible
==4083==
==4083== For counts of detected and suppressed errors, rerun with: -v
==4083== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 3)
Возврат также отсутствует в тест