У меня есть программа на Си, похожая на приведенную ниже.Я пытаюсь написать обертку поверх malloc
с подписью int myAlloc()
.Эта оболочка должна возвращать 1 при успешном выделении памяти или возвращать 0 в случае неудачного выделения памяти.
#include <stdio.h>
#include <stdlib.h>
int myAlloc(void **ptr, int size)
{
*ptr = malloc(size);
if (!ptr)
return 0;
else
return 1;
}
void main()
{
int *p = NULL;
myAlloc(&p, sizeof(int));
printf("%d\n", *p);
}
Когда я компилирую это, я получаю предупреждение «несовместимый тип указателя».Как я могу сделать так, чтобы эта функция вызывалась с любым возможным типом указателя без получения предупреждения?
Можно ли удалить операцию приведения из фактического вызова функции?
Обновить
Я нашел ответ.Вот исправленный код:
#include <stdio.h>
#include <stdlib.h>
int myAlloc(void *ptr,int size)
{
*(void **)ptr = malloc(size);
if (!ptr)
return 0;
else
return 1;
}
int main()
{
int *p = NULL;
myAlloc(&p, sizeof(int));
*p = 5;
printf("%d\n", *p);
return 1;
}