2013-10-07 2 views
0

누군가가 다음 코드가 하나의 C 파일에 모두 포함되어 있지만 make_queue_data() 함수를 다른 C 파일에 넣고 컴파일 할 때 왜 잘 컴파일되는지 설명해 줄 수 있습니까? 그것은 나에게 "할당 캐스팅없이 정수에서 포인터를 만드는"경고를 준다?캐스팅 경고가없는 정수에서 포인터

#include <stdlib.h> 
#include <stdio.h> 

typedef struct pqueue_data_t 
{ 
    int priority; 
    void *queue_data; 
} pqueue_data_t; 

void* 
safe_malloc (size_t size) 
{ 
    void *mem_block = NULL; 
    if ((mem_block = calloc (1, size)) == NULL) { 
     fprintf (stderr, "ERROR: safe_malloc() cannot allocate memory."); 
     exit (EXIT_FAILURE); 
    } 
    return (mem_block); 
} 

pqueue_data_t * 
make_queue_data(void *data, int priority) 
{ 
    pqueue_data_t *pdata; 
    pdata = (pqueue_data_t *) safe_malloc(sizeof(pqueue_data_t)); 
    pdata->priority = priority; 
    pdata->queue_data = data; 
    return (pdata); 
} 

int * 
alloc_data (int val) 
{ 
    int *rv = (int *)safe_malloc(sizeof(int)); 
    *rv = val; 
    return (rv); 
} 

int 
main (int argc, char **argv) 
{ 
    pqueue_data_t *temp; 
    temp = make_queue_data(alloc_data(34), 0); /* problem line */ 
    printf("%d\n", *((int *)temp->queue_data)); 
    return EXIT_SUCCESS; 
} 

이것은 내 코드 전체가 아니므로 관련 부품을 잘라내어 붙여 넣습니다.

내가 어디에 문제가 찾으려고 몇 시간이 벽에 내 머리를 두들겨왔다으로 어떤 도움을 크게

+4

['malloc()'(또는 workalike 복제본)의 반환 값을 C로 변환하지 마시기 바랍니다 (http://stackoverflow.com/a/605858/28169). – unwind

+0

필자는 그것을 지적 해 주셔서 감사합니다. – guskenny83

+0

컴파일하는 코드를 보여 주며, 컴파일되지 않는 다른 코드를 묻습니다. 우리는 다른 코드가 어떻게 생겼는지를 추측 할 수 있습니다. –

답변

3

그것은 난 여기에 (그리고 있습니다 .. 감사하겠습니다 추측). 다른 소스 파일에 프로토 타입이 safe_malloc이 아니기 때문입니다.

다른 소스 파일에 pqueue_data_t이 정의되어 있지 않을 수 있습니다 (헤더 파일에 있어야 함).

1

기능 프로토 타입을이 기능을 사용하는 모든 소스 파일에서 사용할 수 있는지 확인하십시오. 한 파일에서 함수를 정의하고 다른 파일에서 함수를 사용하면 함수 프로토 타입을 알아야합니다.

컴파일러에서 프로토 타입 또는 정의가 없음을 알고있는 함수 호출이 반환 유형 int 인 것으로 가정하면 컴파일러에서 포인터에 할당하면 컴파일러에서 경고합니다. 또한 stdlib.h을 포함하지 않은 경우에 대비하여 malloc의 결과를 전송하지 않아야하는 이유이기도합니다.

+0

덕분에, malloc에서 캐스트를 변경했습니다. 왜 처음에 실제로 그렇게했는지 모릅니다. 다른 하나와 함께, safe_malloc() 및 make_queue_data() 함수 프로토 타입은 모두 실제로 # 테스트 소스 파일에 포함되어 있지만 실제로 테스트 파일 자체에 잘라내어 붙여 넣어야합니까? – guskenny83

관련 문제