Если у меня есть целочисленный массив:Почему один способ malloc seg fault, а другой нет?
int *array;
array = malloc(5 * sizeof(int));
и я таНос к нему, как описано выше, я могу обращаться к нему и установить значения для него. Все отлично.
Но если я создаю что ИНТ указатель и передать ему функции и таНос внутри функции, я не могу получить доступ к/заданные значения в массив , если я не передать его в массив как указатель к указателю?
some_void_function(int *array) {
array = malloc(5 * sizeof(int))
}
int *array;
some_void_function(array);
*(array + 3) = 5; // DOES NOT WORK
Чтобы это исправить, я могу сделать массив принять (интермедиат ** массив) в качестве параметра и передать в адрес указателя (так указатель на указатель), разыменования и назначьте его таНос :
some_void_function(int **array) {
*array = malloc(5 * sizeof(int))
}
int *array;
some_void_function(&array);
*(array + 3) = 5; // WORKS
Может кто-нибудь объяснить это мне? Разве я не делаю то же самое в обеих ситуациях? Передайте адрес, а затем просто разыменовываете это то же самое, что и просто в одном указателе в первую очередь?
Как это может быть одно и то же, если это не так? Вызов 'some_void_function (array);' вы не изменяете 'array', поскольку он передается по значению. –