Итак, вопрос заключается в том, как оригинальный разработчик предотвращает ситуацию, когда пользователь/новый разработчик пытается получить доступ к элементу памяти .Как предотвратить неопределенное поведение, с точки зрения пользователя/нового разработчика?
int *num=(int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
for(i=0;i<n-1;i++){
temp = some_function(x);
}
free(num);
for(i=0;i<n;i++)
{
printf("\nnum[%d]= %d\n",i,num[i]);
}
P.S .: Приведенный выше код работает и фактически распечатывает данные в массиве. Это не наше намерение. [EDIT] Извините, если я не был достаточно ясен. Кто-то предложил задать этот вопрос как отдельный вопрос, я подумал, почему нет. Вот original post
_Данный код работает и фактически распечатывает данные в array._ .. добро пожаловать в UB. –
[Пожалуйста, просмотрите эту дискуссию о том, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –
Код работает на одной конкретной платформе, возможно, в сборке отладки. Запуск этого может привести к сбою в работе другой системы (или сборки релиза). это зависит от распределителя памяти. Некоторые распределители будут нулевыми (или установят все байты на что-то еще) после бесплатного, так что тогда вы получите разные результаты. – Neil