我目前正在尝试在for循环中创建新的结构对象。这些将被传递到处理它们的新函数中。
int start_i = 0;
for(int t = 0 ; t < t_max ; t++) {
// Arguments for the threads.
struct arguments* arguments1 = malloc(sizeof(struct arguments));
arguments1->old_array = old_array;
arguments1->current_array = current_array;
arguments1->next_array = next_array;
arguments1->i_start = start_i;
if (t == t_max - 1) {
arguments1->i_end = i_max;
}
else {
arguments1->i_end = start_i + i_size - 1;
start_i += i_size;
}
printf("%d\n", &arguments1);
pthread_create(&thread_ids[t], NULL, &help, (void*)arguments1);
}
您可以看到我正在使用pthreads。问题在于,不是所有对象都是新对象,而是它们覆盖了旧对象,因为我打印的地址位置是相同的。我需要对象是新的,因为否则不同的线程将对共享数据起作用。
答案 0 :(得分:3)
变量arguments1
是一个指针,其地址(&arguments1
)在提供的代码中不会变化。但是,每次您调用malloc
时,指向的内容都会改变。由于您要传递arguments1
值(而不是&arguments1
的地址)作为pthread_create
的参数,因此您是将正确的东西(指向新分配的结构的指针)传递给线程函数。要查看循环中变化的值,请使用:
printf("%p\n", arguments1);
请注意,%p
是打印指针值而不是%d
的正确方法。