0

Я боролся с довольно странной ситуацией.ADT, указатели void и int - проблемы с несколькими связанными предупреждениями в C

Мне пришлось реализовать некоторые ADT в C и использовать их. при использовании ADT у меня есть typedef'ed void *.

Как я пытался работать со значениями int, пытаясь вернуть int, где ожидается это void *, я получил предупреждение «return делает указатель из целого без приведения». поэтому я подумал, что просто бросил его.

, но затем я встретил this thread, который велел мне не делать такую ​​вещь, бросая int в пустоту *. Я должен был попробовать. поэтому я получил это предупреждение - «приведение к указателю из целого разного размера».

В любом случае, я понял - возможно, я мог бы просто напрямую возвращать int, так как это только в файле использования ADT. поэтому я изменил тип возврата - и я получил те же предупреждения, в других местах, по почти тем же причинам, из того, что я могу сказать.

Пожалуйста, помогите мне избавиться от этих предупреждений. что я должен делать в этой ситуации? Я просмотрел некоторые темы по этой проблеме (например, связанную с ней), но в любом из них нет реального решения моей проблемы.

Моя проблематичной функция: (MapKeyElement является typedef'ed недействительным *)

static MapKeyElement copyKeyID(MapKeyElement n) { 
    if (!n) { 
     return 0; 
    } 
    int *copy = malloc(sizeof(int)); 
    if (!copy) { 
     return NULL; 
    } 
    *copy = *(int *)&n; 
    return (void *)*copy; 
} 

Спасибо за ваше время!

ответ

0

Возвращает указатель на INT:

void *return_int_data(int v) { 
    int *p = malloc(sizeof(int)); 
    p[0] = v; 
    return p; 
} 

Вы можете сделать это для всех типов.

+0

Спасибо за ваш ответ. Я добавил свою проблемную функцию к основному сообщению, она содержит эту аналогичную идею. – Zephyer