Предположим, у вас есть класс Foo C++, и вы говорите:
Foo* foos = new Foo[SOME_CONSTANT];
memset(foos, 0, sizeof(Foo)*SOME_CONSTANT);
//or the bzero equivalent
и у Foo есть элемент данных Bar* barPtr
. Гарантирует ли вышеуказанная операция, что barPtr будет NULL? (то есть ноль). Я столкнулся с случаем в gdb, когда это не соблюдалось для memset, и мне любопытно, почему.
Я знаю, что это, вероятно, плохая практика, но я прошу любопытства.
Я понял, что у меня есть лишний , я делал sizeof(Foo)*SOME_CONSTANT в memset...
memset
должен гарантировать, чтоbarPtr
установлен в нули, что не обязательно равноNULL
. Какое значение вы увидели дляbarPtr
? - person James   schedule 02.11.2012memset()
установит цель на все биты-ноль. Это обычно устанавливает указатели в нуль, но язык не требует, чтобы нулевой указатель был представлен как все биты-ноль. Но я удивлен вашим случаем с gdb, где это не относится к memset; Я не знаю ни одной системы, поддерживающей gdb, где нулевые указатели не являются нулевыми битами. - person Keith Thompson   schedule 02.11.2012