c - 来自整数的指针,没有强制转换警告

标签 c pointers casting warnings

有人可以向我解释为什么以下代码在一个 C 文件中时编译正常,但是当我将 make_queue_data() 函数放入另一个 C 文件并编译它时,它给了我一个“assignment makes来自没有强制转换的整数的指针”警告?

#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;
}

这不是我的全部代码,我只是将相关部分剪切并粘贴到其中。

任何帮助将不胜感激,因为我已经用头撞墙几个小时试图找到问题所在..

最佳答案

可能是(我在这里猜测)因为您在其他源文件中没有 safe_malloc 的原型(prototype)。

或者这可能是因为您没有在其他源文件中定义pqueue_data_t(它可能应该在头文件中)。

关于c - 来自整数的指针,没有强制转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19227203/

相关文章:

当数据复制/扫描/读取到未初始化的指针时崩溃或 "segmentation fault"

c - 在 C 语言中,为什么数组的地址等于它的值?

java - Java中指针被什么代替了?

java - 从 arrayList 转换为 Buffer

C# - 以类型安全的方式将输入对象映射到效果对象

字符 ch[] ="some string";

CPLEX、C 编码

c - 使用带有双指针的 malloc 时出现段错误

c - 手动继续循环

mysql - 当我进行 LEFT JOIN 时,我的 SIGNED INT 被转换为 UNSIGNED