@bqio
https://bqio.github.io/

Как выделить память в другой функции, передавая pointer через аргументы?

#include <stdio.h>
#include <stdlib.h>

#define TEST_STR "123"
#define TEST_STR_SIZE 3

static void update_callback(char *ptr)
{
    ptr = (char *)malloc(sizeof(char) * TEST_STR_SIZE + 1);
    ptr = TEST_STR;
    ptr[TEST_STR_SIZE] = 0;
}

int main(void) {
    char *nilstr = NULL;
    
    update_callback(nilstr);
    
    printf("%s\n", nilstr); // Segmentation fault
    
    return 0;
}
  • Вопрос задан
  • 120 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
В вашем случае логичнее возвращать указатель на вделенную память.

Если уж очень надо через аргументы, то передавайте указатель на указатель:
static void update_callback(char **ptr)
{
    *ptr = (char *)malloc(sizeof(char) * TEST_STR_SIZE + 1);
...


P.s. В вашем коде утечка памяти. Вы выделяете память, потом единственный указатель на эту память переписываете указателем на TEST_STR.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы