有两个线程需要访问相同的全局C结构。我需要将函数中的值复制到以下结构中
typedef struct {
struct queue ** queue1;
} my_struct;
my_struct my_queue;
my_func(struct queue ** queue2)
{
my_queue.queue1 = queue2;
*(my_queue.queue1) = malloc(sizeof( struct * queue));
*(my_queue.queue1) = *queue2;
}
当我检查值时,my_queue.queue1正确指向与queue2相同的地址,但*(my_queue.queue1)不指向与* queue2相同的地址。我如何使它们相同?我需要知道两种方法。首先,我如何通过指针使它们指向相同的结构,以及如果我想制作结构的副本?
答案 0 :(得分:0)
我认为您的程序无法正确编译。 sizeof(struct * queue)看起来不正确。
也许你的意思是这样的:
#include <stdio.h>
#include <stdlib.h>
struct queue { int foo;};
typedef struct {
struct queue **queue1;
} my_struct;
my_struct my_queue;
my_func(struct queue *queue2)
{
my_queue.queue1 = (struct queue **)malloc(sizeof(struct queue **));
*(my_queue.queue1) = queue2;
}
int main(int argc, char **argv){
struct queue *queue2 = (struct queue *)malloc(sizeof(struct queue *));
queue2->foo = 3;
printf("queue2 value is %d\n", queue2->foo);
my_func(queue2);
printf("queue ptrs are %ld and %ld\n",
(long)*(my_queue.queue1), (long)queue2);
printf("queue values are %d and %d\n",
(*(my_queue.queue1))->foo,
queue2->foo);
}
答案 1 :(得分:0)
为什么需要malloc作为结构: (struct queue * )malloc(sizeof(struct queue * ))
如果我需要存储指向指针的指针,我不应该使用malloc。两个变量都可以指向相同的地址。
例如:
int i = 1;
int *j = &i;
int **k = &j;
k ..
不需要malloc