Я просто немного освежил свои понятия C, где я запутался в каком-то поведении. Рассмотрим следующий фрагмент кода:Динамическая путаница массива
#include<stdio.h>
#include<stdlib.h>
int main(){
int * arr;
arr= malloc(3*sizeof(*arr));
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
printf("value is %d \n", arr[3]);
return 0;
}
Проблема в том, что программа функционирует правильно! Насколько я понимаю, я выделяю память для массива из 3 целых чисел. Поэтому в основном, когда я пытаюсь поместить значение в arr[3]
, должно быть segmentation fault
, так как для него не было присвоено никакой памяти. Но он отлично работает и печатает значение 4. Либо это какое-то странное поведение, либо я серьезно нуждаюсь в пересмотре базового C. Пожалуйста, если кто-нибудь может предложить какое-то объяснение, я бы очень признателен ему. Спасибо.
уже видел так много раз: возможно дубликат [Массив больше выделенного?] (Http://stackoverflow.com/questions/8057584/array-is-larger-than-allocated) –
Согласен. Этот или подобный вопрос, кажется, публикуется каждые несколько дней. –