Когда вы пишете
JobSequence jobSequence;
Вы просите компилятор создать переменную типа JobSequence
в стеке .
Так что вы делаетене нужно резервировать для нее память .
Проблема, с которой вы сталкиваетесь в отладчике, заключается в том, что функция jobSequence
in main
не модифицируется функцией new_JobSequence
.
Вы можете увидеть это с некоторыми следами отладки:
void new_JobSequence(Instance* baseInstance, JobSequence* jobSequence){
printf("start of %s: js is %p\n", __FUNCTION__, jobSequence);
jobSequence = malloc(sizeof(JobSequence));
printf("after malloc, js is %p\n", jobSequence);
jobSequence->baseInstance = baseInstance;
jobSequence->cost = 0;
list_new(&jobSequence->sequence);
}
Таким образом, чтобы ваша функция работала с переменной, созданной в main
, вы должны написать что-то вроде:
void new_JobSequence(Instance* baseInstance, JobSequence* jobSequence)
{
jobSequence->baseInstance = baseInstance;
jobSequence->cost = 0;
list_new(&(jobSequence->sequence));
}
...
int main(void)
{
/* ... */
JobSequence jobSequence;
new_JobSequence(..., &jobSequence);
}
Если вы хотите выделить память в куче для структуры, вы должны следовать этому подходу:
JobSequence *new_JobSequence(Instance* baseInstance){
JobSequence *js= malloc(sizeof *js);
js->baseInstance = baseInstance;
js->cost = 0;
list_new(&(js->sequence));
return js;
}
...
int main(void)
{
/* ... */
JobSequence *jobSequence = new_JobSequence(...);
}