Так что у меня этот маленький каверзный вопрос, мне нужно ответить:C размер функции таНос
На какой сегмент в памяти с + 9, указывающий на, если функция:
void f()
{
int *c=(int*)malloc(10);
}
Я думаю, что я знаю как работает malloc, и я просмотрел другие вопросы, поэтому это должно выделить 10 байт памяти и вернуть адрес первого, плюс он будет передавать его в int.
Так как sizeof(int)
- это 4 байта, я думал, что не хватит места для 9 целых чисел, а c + , программа работает нормально, как будто выделено 10*sizeof(int)
. Так где я делаю ошибку?
'c + 9' - это то же самое, что и' & c [9] ', но при условии, что' c' действительно является указателем на массив из не менее 10 элементов. Это не так в вашем коде. –
Я знаю это, но этот код здесь отлично работает, когда я его использую, я не делаю программу, это вопрос. Когда я делаю программу, я использую malloc (10 * sizeof (int)), например. Но это вопрос, чтобы проверить мои знания о том, как работает C. – Nebeski
У вас есть неопределенное поведение, когда вы используете память вне диапазона. В большинстве ситуаций вы не получите ошибку времени компиляции. Также не нужно бросать исключение. Кроме того, компилятор может оптимизировать доступ к памяти, если вам это не нужно. – JojOatXGME