Я выделяю некоторую память в имени функции myalloc () и использую и освобождаю ее в main ().
Я использую двойной указатель, чтобы сделать это, вот код, который отлично работает,
//Example # 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void myalloc( char ** ptr)
{
*ptr = malloc(255);
strcpy( *ptr, "Hello World");
}
int main()
{
char *ptr = 0;
myalloc( &ptr );
printf("String is %s\n", ptr);
free(ptr);
return 0;
}
Но следующий код не работает и выдает ошибку сегментации.
Я думаю, что это еще один способ использовать двойные указатели.
//Example # 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void myalloc( char ** ptr)
{
*ptr = malloc(255);
strcpy( *ptr, "Hello World");
}
int main()
{
char **ptr = 0;
myalloc( ptr );
printf("String is %s\n", *ptr);
free(*ptr);
return 0;
}
Пожалуйста, объясните мне, почему это вызывает ошибку сегмента во втором примере.
Примечание: язык = C, компилятор = GCC 4.5.1, ОС = Fedora Core 14
Кроме того, я знаю, что уже был задан некоторый вопрос, связанный с распределением памяти с использованием двойных указателей, но они не решают эту проблему, поэтому, пожалуйста, не отмечайте его как повторяющийся вопрос.