int main ()
{
char *destination;
char source[10] = "jigarpatel";
destination = (char*) malloc(5);
memcpy(destination, source, 10);
printf("%s and size is %d", destination, strlen(destination));
free(destination);
return 0;
}
Выход:
jigarpatel and size is 10
Вопрос:
Здесь я выделил всего 5 байт для назначения, но длина назначения составляет 10, почему это так?
Где хранятся остальные байты?
Безопасно ли это во встроенной системе? Есть ли вероятность сбоя или ошибки сегментации?
Как я могу обнаружить этот тип ошибки?
Еще один вопрос:
видите, я пишу одну библиотеку, где пользователь запрашивает необходимую память, а библиотека говорит выделить 10 байтов, а затем пользователь malloc 10 байтов и передать указатель на библиотеку. теперь библиотека хранит там некоторые данные ... теперь посмотрите, сказала ли библиотека выделить 10 байтов, но пользователь выделил только 5 байтов и дал этот указатель на библиотеку, тогда как я могу определить, что у пользователя недостаточно памяти malloc.
printf
иstrlen
нашли 0 байт послеl
, но вы не имели права ожидать и этого. - person Steve Jessop   schedule 16.08.2011