@MaxShell

Почему функция неправильно изменяет динамический массив?

У меня есть следующий код:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

void test(char** array){
	array = malloc(sizeof(char*));
	array[0] = malloc(255 * sizeof(char));
	strcpy(array[0], "Hello world!");
}

int main(){
	char** array;
	test(array);
	puts(array[0]);
	return 0;
}


После выполнения программы выводит: ./main

Не могу понять, почему он так делает. Можете подсказать причину? Или может нужно что-то почитать об этом?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Можете подсказать причину?

Неправильная работа с указателями. Конкретно:

void test(char** array){
	array = malloc(sizeof(char*));
	array[0] = malloc(255 * sizeof(char));
	strcpy(array[0], "Hello world!");
}

Если имелось в виду выделение и возврат массива строк, то должно быть так:
void test(char*** array){
	*array = malloc(sizeof(char*));
	(*array)[0] = malloc(255 * sizeof(char));
	strcpy((*array)[0], "Hello world!");
}


char** array;
test(array);

Здесь должно быть
char** array;
test(&array);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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