2011-08-31 4 views
0

두 개의 스레드가 동일한 전역 C 구조체에 액세스해야합니다. I는 다음의 구조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; 
} 

로 함수의 값을 복사 할 필요가 나는 queue2 동일 어드레스로 정확하게 값 my_queue.queue1 점을 확인하지만, * (my_queue.queue1)의 동일 어드레스를 가리 키지 않으면 * queue2. 어떻게 똑같이 만들 수 있습니까? 두 가지 접근법을 알아야합니다. 먼저 포인터를 통해 같은 구조체를 가리 키도록하고 구조체 복사본을 만들고 싶다면 어떻게해야합니까?

+4

당신은 더 설명 이름을 사용할 수 없습니다? –

+0

더 많은 설명이 포함 된 이름을 추가했습니다. – Haz

+0

항상 대문자로 문자를 입력하고 함수 이름과 객체 이름을 소문자로 시작하십시오. 코드를 훨씬 더 읽기 쉽도록 만듭니다! – Kos

답변

0

저는 프로그램이 올바르게 컴파일되지 않을 것이라고 생각합니다. sizeof (struct * queue)가 올바르게 보이지 않습니다. 당신이 구조체에 대한 malloc을해야합니까 왜

#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 (sizeof 연산자 (구조체 큐 *))

하면

아마도 당신은이 같은 의미 내가 malloc 할 필요가없는 포인터에 대한 포인터를 저장할 필요가있다. 두 변수 모두 동일한 주소를 가리킬 수 있습니다.

예를 들어

:

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

K 필요 없음 malloc에 ​​..

관련 문제