У меня есть программа на C, как показано ниже. Я пытаюсь написать обертку поверх 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;
}
Это, как представляется, не быть стандартным с, или C++, в качестве основного не возвращается тщетным. –
@ RichardJ.RossIII Вы ошибаетесь. Прочитайте [this] (http://stackoverflow.com/questions/5296163/why-is-the-type-of-the-main-function-in-c-and-c-left-to-the-user-to -define/5296593 # 5296593). – Lundin
@ Lundin Я прочитал это, и мой вопрос все еще стоит. Я не считаю, что это находится в автономной среде или в среде размещения. –