Я хочу выделить некоторую память указателю с помощью функции. Ниже приводится код, который я написал:Невозможно выделить память внутри функции и вернуть ее в C
#include <stdio.h>
#include <stdlib.h>
int test(unsigned char **q)
{
*q = (unsigned char *) malloc(250);
if(*q == NULL)
{
printf("\n Error: failed to allocate memory");
return -1;
}
// *q[0] = 10;
// *q[1] = 10;
*q[2] = 10;
return 0; /* Returns 0 on success, non-zero value on failure */
}
int main(void)
{
unsigned char *p;
// printf("\n &p = %u", &p);
int result = test(&p);
// printf("\n p[2] = %d", p[2]);
return 0;
}
Если я пишу что-то в *q[0]
или *q[1]
, нет никакой ошибки. Но когда я пытаюсь что-то написать *q[2]
, он дает «Ошибка сегментации (сбрасывание ядра)».
Также я получаю все данные как 0, используя p[ ]
, за исключением p[0]
.
Что не так с этим кодом?
Добро пожаловать в переполнение стека! [Пожалуйста, ознакомьтесь с этим обсуждением, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –
'* q [2] = 10;' должно быть '(* q) [2] = 10;'. – mch
Недостаток знаний! = Typo. Голосование для повторного открытия. Не стесняйтесь закрываться как обман. –