2011-08-31 165 views
0

有兩個線程需要訪問相同的全局C結構。我需要從函數的值複製到以下結構將指針複製到指向結構中某個結構的指針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指向相同的地址隊列2,但*(my_queue.queue1)不指向同一地址*隊列2。我如何使它們相同?我需要知道兩種方法。首先,我如何讓它們通過指針指向相同的結構,以及如果我想製作結構的副本?

+4

你不能使用更具描述性的名字呢? –

+0

我已添加更多描述性名稱。 – Haz

+0

請始終使用大寫字母輸入名稱,使用小寫字母輸入功能和對象名稱。使代碼更加可讀! – Kos

回答

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); 

} 
0

爲什麼你需要對malloc的結構: (結構隊列* )的malloc(的sizeof(結構隊列*))

如果我需要存儲一個指向我不應該有malloc的指針。這兩個變量都可以指向相同的地址。

例如:

int i = 1; 
int *j = &i; 
int **k = &j; 

沒有必要的malloc對於k ..