вопросы по C++ на собеседование
От: st.  
Дата: 10.02.06 08:40
Оценка:
Доброго времени суток всем.

У меня тут пара вопросов, на которые нужно найти ответ:

30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?
31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?

Если можно, с кратким пояснением.

Заранее благодарен за помощь.
Re: вопросы по C++ на собеседование
От: Аноним  
Дата: 10.02.06 08:47
Оценка:
Здравствуйте, st., Вы писали:

st.>Доброго времени суток всем.


st.>У меня тут пара вопросов, на которые нужно найти ответ:


st.>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

Неопределенное поведение
st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
Можно использовать как идентификаторы ключевые слова С++, которые не являются ключевыми словами С (class, private, protected и т.д.).
st.>Если можно, с кратким пояснением.

st.>Заранее благодарен за помощь.
Re: вопросы по C++ на собеседование
От: Vamp Россия  
Дата: 10.02.06 08:48
Оценка:
st.>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?
Undefined behaviour. Точно не вызовется деструктор.
Да здравствует мыло душистое и веревка пушистая.
Re: вопросы по C++ на собеседование
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 10.02.06 08:49
Оценка: :))) :))) :)
Здравствуйте, st., Вы писали:

st.>У меня тут пара вопросов, на которые нужно найти ответ:


st.>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

В углу заплачет мать старушка,
Слезу утрет старик отец.
...


st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?


Это не важно. Главное, что последствия будут те же что и в первом случае.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: вопросы по C++ на собеседование
От: Аноним  
Дата: 10.02.06 08:51
Оценка: :))
st.>>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
А>Можно использовать как идентификаторы ключевые слова С++, которые не являются ключевыми словами С (class, private, protected и т.д.).

Помню, помню, была у нас системка написанная на сях, когда переводили под С++, нарвались на идентификатор переменной new. Не забыть никогда
Re: вопросы по C++ на собеседование
От: Greg Zubankov СССР  
Дата: 10.02.06 08:52
Оценка:
Здравствуйте, st., Вы писали:

st.>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

Уже объяснили

st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?

Variable length array.
Re[3]: вопросы по C++ на собеседование
От: Vamp Россия  
Дата: 10.02.06 08:54
Оценка:
А>Помню, помню, была у нас системка написанная на сях, когда переводили под С++, нарвались на идентификатор переменной new. Не забыть никогда

Это — твердая пять!
Да здравствует мыло душистое и веревка пушистая.
Re[2]: вопросы по C++ на собеседование
От: L2-Max Украина  
Дата: 10.02.06 08:57
Оценка: -11
Здравствуйте, Аноним, Вы писали:

st.>>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

А>Неопределенное поведение

Как раз определенное )), а определяется текущей перегрузкой (реализацией) оператора new, например в VC6 это malloc(). Так, что можно смело вызвать free
L2-Max
Re: вопросы по C++ на собеседование
От: L2-Max Украина  
Дата: 10.02.06 08:59
Оценка:
Здравствуйте, st., Вы писали:

st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?



в С++ отсутствуют списки параметров функций
L2-Max
Re[3]: вопросы по C++ на собеседование
От: Кодт Россия  
Дата: 10.02.06 09:05
Оценка:
Здравствуйте, L2-Max, Вы писали:

st.>>>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

А>>Неопределенное поведение

LM>Как раз определенное )), а определяется текущей перегрузкой (реализацией) оператора new, например в VC6 это malloc(). Так, что можно смело вызвать free


Если ты только выделяешь память, вызывая оператор new — то можешь, пользуясь тайным знанием о конкретной реализации оператора delete, выполнить его вручную.
void* block1 = ::operator new(100);
void* block2 = ::operator new(100);

::operator delete(block1);
free(block2);

Не забываем, что есть ещё operator new[] и пара к нему — operator delete[]
Перекуём баги на фичи!
Re[4]: вопросы по C++ на собеседование
От: L2-Max Украина  
Дата: 10.02.06 09:07
Оценка:
Здравствуйте, Кодт, Вы писали:

я что то не так сказал ?
L2-Max
Re: вопросы по C++ на собеседование
От: Bell Россия  
Дата: 10.02.06 09:31
Оценка:
Здравствуйте, st., Вы писали:

st.>Доброго времени суток всем.


st.>У меня тут пара вопросов, на которые нужно найти ответ:


st.>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

Неопределенное поведение.
st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
рекурсивно вызывать main.
Любите книгу — источник знаний (с) М.Горький
Re[5]: вопросы по C++ на собеседование
От: Аноним  
Дата: 10.02.06 09:33
Оценка:
LM>я что то не так сказал ?

Про деструкторы слыхал?
Re[5]: вопросы по C++ на собеседование
От: gear nuke  
Дата: 10.02.06 09:39
Оценка:
Здравствуйте, L2-Max, Вы писали:

LM>я что то не так сказал ?


Для объектов не-POD типов delete вызывает деструктор.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[5]: вопросы по C++ на собеседование
От: Кодт Россия  
Дата: 10.02.06 09:39
Оценка:
Здравствуйте, L2-Max, Вы писали:

LM>Здравствуйте, Кодт, Вы писали:


LM>я что то не так сказал ?


Я просто подчеркнул разницу между оператором new и выражением new. Их регулярно путают.
Перекуём баги на фичи!
Re[3]: вопросы по C++ на собеседование
От: Lorenzo_LAMAS  
Дата: 10.02.06 09:42
Оценка:
А>Помню, помню, была у нас системка написанная на сях, когда переводили под С++, нарвались на идентификатор переменной new. Не забыть никогда

Я думаю, как раз случай с new легко обнаруживался и исправлялся. Вообще, вопрос был что можно сделать в С такого чего нельзя в С++ и потому использование идентификаторов-ключевых слов С++ — нормальный ответ. Я вот встречался с программой на С, в которой были имена функций and/or (хотя, они, конечно, не ключевые слова, но альтернативные токены в С++)
Of course, the code must be complete enough to compile and link.
Re[6]: вопросы по C++ на собеседование
От: Кодт Россия  
Дата: 10.02.06 09:44
Оценка:
Здравствуйте, gear nuke, Вы писали:

LM>>я что то не так сказал ?


GN>Для объектов не-POD типов delete вызывает деструктор.


На самом деле, это ещё вопрос — шла ли речь о конструировании объекта или только о выделении блока памяти.
Хотя неопределённое поведение всё равно будет, потому что free предполагает, что на входе у неё указатель, полученный от malloc, а не что попало.
Перекуём баги на фичи!
Re: вопросы по C++ на собеседование
От: gear nuke  
Дата: 10.02.06 10:03
Оценка:
Здравствуйте, st., Вы писали:

st.>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?


Из того, что не сказали:
Макросы с переменным числом аргуменотов (параметр __VA_ARGS__).
Можно использовать прагмы в макроподстановках (_Pragma).
Встроенные типы _Complex и _Imaginary.
Квалификатор restrict.
Хотя... далеко не в любом C (и последние 2 пункта плохо попадают под "можно\нельзя")

И ещё что-то связанное с поинтерами void *, но это совсем уж притянуто...
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[3]: вопросы по C++ на собеседование
От: VoidEx  
Дата: 10.02.06 10:51
Оценка:
Здравствуйте, L2-Max, Вы писали:

LM>Здравствуйте, Аноним, Вы писали:


st.>>>30. Что случится, если выделить память используя “new”, и освободить ее, используя “free”?

А>>Неопределенное поведение

LM>Как раз определенное )), а определяется текущей перегрузкой (реализацией) оператора new, например в VC6 это malloc(). Так, что можно смело вызвать free


И где же оно определено для ВСЕХ реализаций ?
Так можно сказать, что и
A *a = new A[100]; delete a; тоже определено.
Например, микрософтские некоторые (не проверял, мб и все) просто вызовут только один деструктор. Определено поведение ?
Re[2]: вопросы по C++ на собеседование
От: Conductor СССР  
Дата: 10.02.06 11:04
Оценка:
st.>>31. Есть что-то, что можно сделать в Си, но нельзя сделать в С++?
B>рекурсивно вызывать main.

Это с чего это?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.