170 похожих чатов

Char *mem = (char *)malloc(1000); mem[12] = 'c'; std::cout << mem[12]; я правильно

понял, что по новым стандартам здесь уб? и даже extern "C" не помогает?

33 ответов

18 просмотров

Почему?

А где тут UB?

Кажется, начиная с C++20 как раз уб нет, malloc неявно создает нужные объекты

Michael- Автор вопроса
Viktor Chyzhdzenka
Почему?

потому что "lifetime объектов начинается с вызова конструктора, new или placement new"

Michael
потому что "lifetime объектов начинается с вызова ...

новые стандарты наоборот добавляют послабления

Michael- Автор вопроса
Viktor Chyzhdzenka
А причем тут это?

при том что malloc сишная функция и никаких кнструкторов она не вызывает

Michael
потому что "lifetime объектов начинается с вызова ...

Не понял, ну выделили мы 1000 байт. И чего? Причем тут?

В предыдущих версиях стандарта в момент mem[12] = 'c' было (вроде как) уб, обращение к несуществующему объекту

лайфтайм некоторых типов она начинать умеет (ну почти). новые стандарты добавляют новые правила, чтобы 1) так умели больше функций 2) они умели это для большего кол-ва типов

Mikail Bagishov
В предыдущих версиях стандарта в момент mem[12] = ...

Не было. Я уж перепугался, что в последних чего безуного наворотили.

Michael- Автор вопроса
Michael
тоесть malloc будет их занулять?

Что он будет занулять? С какого бодуна?

Mikail Bagishov
В предыдущих версиях стандарта в момент mem[12] = ...

Первый раз об этом слышу. Странно. Мы выделили память в куче. Время жизни типа указателя - автоматическое (до конца функции), время жизни 1000 байт - динамическое ( до конца программы, если не убрать самому). Где тут UB я так и не понял.

Sergey
Первый раз об этом слышу. Странно. Мы выделили пам...

Указателя — да. А памяти по нему — не началось.

Интересно, а где ты тут собрался впилить extern "C" ?

Тут наверное намёк на начало времени жизни, так наоборот, по новым стандартам тут НЕ UB, а по старым - да.

night111
А где в этом коде хоть один объект ?

char *mem = (char *)malloc(1000); mem - объект

night111
А где в этом коде хоть один объект ?

mem, если натягивать сову на глобус

night111
А где в этом коде хоть один объект ?

Там их полно. 1003 на вскидку вижу.

Viktor Chyzhdzenka
mem, если натягивать сову на глобус

Да не надо ничего натягивать, mem настоящий объект.

Ilya Zviagin
1002

Ещё литерал rvalue.

Viktor Chyzhdzenka
По сути да, по терминологии нет.

По терминологии да. Не являются объектами только ссылки и функции.

Ilya Zviagin
А это не объект

Хотя, могу ошибаться, это очень тонкие нюансы

Похожие вопросы

Обсуждают сегодня

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта