2013-07-01 3 views
-1

노조의 내용을 무언가로 채우려 고 시도하지만 오류가 발생합니다. 여기에 코드가 있습니다 :노조의 내용을 채우는 데 오류가 발생합니다.

struct command 
{ 
    int type; 
    int *input; 
    int *output; 
    union{ 
     struct command *command[2]; 
     char **word; 
    }u; 
}; 

typedef struct command *command_t; 

command_t read_command(){ 
    command_t main1 = NULL; 
    command_t main2 = NULL; 
    main1->u->word = (char**)malloc(1); 
    main1->u->word[0] = (char*)malloc(1); 
    //some other code in here 
} 

"main1-> u-> word = (char **) malloc (1);" 줄을 말하는 : "잘못된 유형 인수 â -> â (âUNION â)"

어떤 제안? thx

+0

'main1-> u.word'를 사용하면'main1'을 얻기 위해'malloc'을 사용해야합니다. –

답변

0

main1->u.word = ...이어야합니다. (. u 후 화살표 대신 점)

하지만 당신의 코드는 컴파일러가 찾을 수 없습니다 여러 다른 오류가 포함이 포인터가 NULL 포인터이기 때문에 당신은 메인 1과 메인 2에 아무것도 할당 할 수 없습니다

합니다. 먼저 메모리를 할당하십시오.

첫 번째 malloc은 단일 바이트를 할당하지만 char*은 4 또는 8 바이트가 필요합니다. 또한 단 하나의 바이트를 할당하면 길이 1

두 번째의 malloc의 char*의 배열을 할당 할 가정

main1->u.word = (char**)malloc(sizeof(char*)); 

:이 작업을 사용하려면. 얼마나 많은 데이터를 여기에 저장 하시겠습니까?

+0

일부 메모리를 먼저 할당하면 "command_t main1 = (command_t) malloc (sizeof (command_t));"과 같은 의미가됩니까? –

+0

네, 잘 생겼습니다. –

0

main1->u은 합집합이며 포인터가 아닌 조합이므로 -> 연산자를 사용할 수 없습니다.

또한, 포인터에 충분한 공간을 할당하지 않습니다 (malloc(1)은 1 바이트 크기의 메모리 블록에 대한 포인터를 반환하며 그 값은 sizeof(char **)입니다). 반환 값은 malloc(), which is wrong입니다. 원하는 것은

main1->u.word = malloc(sizeof(*main->u.word)); 
main1->u.word[0] = malloc(LENGTH_OF_STRING + 1); // for the NUL terminator 

대신입니다.

관련 문제