누군가가 다음 코드가 하나의 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;
}
이것은 내 코드 전체가 아니므로 관련 부품을 잘라내어 붙여 넣습니다.
내가 어디에 문제가 찾으려고 몇 시간이 벽에 내 머리를 두들겨왔다으로 어떤 도움을 크게
['malloc()'(또는 workalike 복제본)의 반환 값을 C로 변환하지 마시기 바랍니다 (http://stackoverflow.com/a/605858/28169). – unwind
필자는 그것을 지적 해 주셔서 감사합니다. – guskenny83
컴파일하는 코드를 보여 주며, 컴파일되지 않는 다른 코드를 묻습니다. 우리는 다른 코드가 어떻게 생겼는지를 추측 할 수 있습니다. –