Я заметил ошибку в своей программе и решил написать простой, который поможет мне понять, что происходит. Вот он:
#include <stdio.h>
#include <stdlib.h>
char * first()
{
char * word = malloc(sizeof(char) * 10);
word[0] = 'a';
word[1] = 'b';
word[2] = '\0';
return word;
}
char * second ()
{
char * word = malloc(sizeof(char) * 10);
word = "ab";
return word;
}
int main ()
{
char * out = first();
printf("%s", out);
free(out);
out = second();
printf("%s", out);
free(out);
return 0;
}
Функция first()
работает правильно, но second()
(точно free(out)
) генерирует ошибку:
Ошибка в `./a.out ': munmap_chunk(): недопустимый указатель: 0x0000000000400714 *** ababAborted (core dumped)
Я не понимаю, почему первая функция правильная, а вторая - нет. Может ли кто-нибудь объяснить, почему?