У меня есть простой вопрос, который, похоже, я не могу найти в любом месте.Почему malloc работает без правильного количества выделенных байтов?
Почему этот код скомпилирован и работает, когда я выделил достаточно памяти всего на два символа, «он», «привет» не должен соответствовать?
Он печатает правильную длину, которая 6.
Свободный не дает ошибку.
char* testF() {
char *arr = (char*)malloc(2*sizeof(char));
strcpy(arr, "hellos");
return arr;
}
int main() {
char *arr = testF();
printf("%c%c%c%c%c%c\n", arr[0], arr[1], arr[2], arr[3], arr[4], arr[5]);
printf("Length = %d", strlen(arr));
free(arr);
return 0;
}
Это не так. Это UB. –
См. [Здесь] (http://stackoverflow.com/q/40271508/5021321). –
Что означает UB? – Lurr