new char[n]() - должно ли обнуляться?
От: любой  
Дата: 19.06.08 11:15
Оценка:
художников никогда не обижал
Re: new char[n]() - должно ли обнуляться?
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 19.06.08 11:17
Оценка: +2
Здравствуйте, любой, Вы писали:

Л>


IMHO да.
Re: new char[n]() - должно ли обнуляться?
От: Lorenzo_LAMAS  
Дата: 19.06.08 11:42
Оценка:
Л>
да, должно.

но, возможно, не все компиляторы об этом знают, так что, тебе придется поверять каждый твой конкретный
Of course, the code must be complete enough to compile and link.
Re[2]: new char[n]() - должно ли обнуляться?
От: любой  
Дата: 19.06.08 11:50
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>да, должно.


L_L>но, возможно, не все компиляторы об этом знают, так что, тебе придется поверять каждый твой конкретный


Случайно один уже проверил (g++ (GCC) 3.4.6 [FreeBSD]). Результат отрицательный.
художников никогда не обижал
Re: new char[n]() - должно ли обнуляться?
От: Bell Россия  
Дата: 19.06.08 12:06
Оценка:
Здравствуйте, любой, Вы писали:

Л>


Должно.
В стандарте — 8.5/7, 8.5/5.
Строка для поиска по сайту: "]()" + new

Но проверить не помешает. VC7.1 обнуляет, VC6 — нет.
Любите книгу — источник знаний (с) М.Горький
Re[2]: new char[n]() - должно ли обнуляться?
От: CreatorCray  
Дата: 19.06.08 12:19
Оценка:
Здравствуйте, Bell, Вы писали:

B>Но проверить не помешает. VC7.1 обнуляет, VC6 — нет.

ICC 10.1 обнуляет
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: new char[n]() - должно ли обнуляться?
От: Vamp Россия  
Дата: 19.06.08 15:13
Оценка:
А как вы убеждаетесь, что обнуляет всегда? По-моему, здесь можно быть уверенным только в том случае, если не обнуляет...
Да здравствует мыло душистое и веревка пушистая.
Re[4]: new char[n]() - должно ли обнуляться?
От: Bell Россия  
Дата: 19.06.08 15:32
Оценка:
Здравствуйте, Vamp, Вы писали:

V>А как вы убеждаетесь, что обнуляет всегда? По-моему, здесь можно быть уверенным только в том случае, если не обнуляет...

А откуда собственно такая неуверенность?
Стандарт требует, чтобы при наличии () каждый элемет массива был value-initialized, т.е. обнулен в данном случае.
Или компилятор выполняет это требование и обнуляет элементы, или нет. Проверить можно на практике
Любите книгу — источник знаний (с) М.Горький
Re[5]: new char[n]() - должно ли обнуляться?
От: Vamp Россия  
Дата: 19.06.08 15:35
Оценка:
B>Стандарт требует, чтобы при наличии () каждый элемет массива был value-initialized, т.е. обнулен в данном случае.
B>Или компилятор выполняет это требование и обнуляет элементы, или нет. Проверить можно на практике
Или НЕ выполняет, заполняя значение мусором, который в ДАННОМ КОНКРЕТНОМ тесте оказался нулем... Возможно?
Да здравствует мыло душистое и веревка пушистая.
Re[6]: new char[n]() - должно ли обнуляться?
От: Erop Россия  
Дата: 19.06.08 20:20
Оценка: 2 (1) +1
Здравствуйте, Vamp, Вы писали:

V>Или НЕ выполняет, заполняя значение мусором, который в ДАННОМ КОНКРЕТНОМ тесте оказался нулем... Возможно?

Можно прямо проверить. Например так:
char buffer[n] = "Test";
assert( 0 == *new( buffer ) char[n]() );
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: new char[n]() - должно ли обнуляться?
От: CreatorCray  
Дата: 19.06.08 20:34
Оценка:
Здравствуйте, Vamp, Вы писали:

V>А как вы убеждаетесь, что обнуляет всегда?

Элементарно — в сгенеренный код смотрю.

    _asm nop;
    char *a = new char [100]();
    _asm nop;
    char *b = new char [100];
    _asm nop;


  nop
    
  push    64h
  call    ??2@YAPAXI@Z    ; operator new(uint)
  pop     ecx
  test    eax, eax
  jz      short loc_71
  xor     edx, edx
  mov     [eax], edx
  mov     [eax+4], edx
  mov     [eax+8], edx
  mov     [eax+0Ch], edx
  mov     [eax+10h], edx
  mov     [eax+14h], edx
  mov     [eax+18h], edx
  mov     [eax+1Ch], edx
  mov     [eax+20h], edx
  mov     [eax+24h], edx
  mov     [eax+28h], edx
  mov     [eax+2Ch], edx
  mov     [eax+30h], edx
  mov     [eax+34h], edx
  mov     [eax+38h], edx
  mov     [eax+3Ch], edx
  mov     [eax+40h], edx
  mov     [eax+44h], edx
  mov     [eax+48h], edx
  mov     [eax+4Ch], edx
  mov     [eax+50h], edx
  mov     [eax+54h], edx
  mov     [eax+58h], edx
  mov     [eax+5Ch], edx
  mov     [eax+60h], edx
 loc_71:
  nop

  push    64h
  call    ??2@YAPAXI@Z    ; operator new(uint)
  pop     ecx

  nop
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[6]: new char[n]() - должно ли обнуляться?
От: michael_srv  
Дата: 20.06.08 12:06
Оценка:
Здравствуйте, Vamp, Вы писали:

B>>Стандарт требует, чтобы при наличии () каждый элемет массива был value-initialized, т.е. обнулен в данном случае.

B>>Или компилятор выполняет это требование и обнуляет элементы, или нет. Проверить можно на практике
V>Или НЕ выполняет, заполняя значение мусором, который в ДАННОМ КОНКРЕТНОМ тесте оказался нулем... Возможно?

проверить можно посмотрев на сгенерированный ассемблерный код...
Re: new char[n]() - должно ли обнуляться?
От: Alexander G Украина  
Дата: 20.06.08 13:42
Оценка:
Здравствуйте, любой, Вы писали:

Л>


Visual Studio: сделали правильно начиная с Visual C++ 2005 и добавили ворнинг C4345
Русский военный корабль идёт ко дну!
Re[5]: new char[n]() - должно ли обнуляться?
От: Константин Россия  
Дата: 20.06.08 14:23
Оценка:
Здравствуйте, CreatorCray, Вы писали:

V>>А как вы убеждаетесь, что обнуляет всегда?

CC>Элементарно — в сгенеренный код смотрю.

Стрёмно. Никто гарантирует, что при других опциях компилятора поведение будет нужным.
Re[7]: new char[n]() - должно ли обнуляться?
От: Axc  
Дата: 08.07.08 12:44
Оценка:
Здравствуйте, Erop, Вы писали:

V>>Или НЕ выполняет, заполняя значение мусором, который в ДАННОМ КОНКРЕТНОМ тесте оказался нулем... Возможно?

E>Можно прямо проверить. Например так:
char buffer[n] = "Test";
E>assert( 0 == *new( buffer ) char[n]() );


Я, конечно, параноик. Но легко представляю себе компилятор, в debug'е обнуляющий память, а в release — нет
Re[8]: new char[n]() - должно ли обнуляться?
От: don ASKet Россия  
Дата: 08.07.08 15:35
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>Я, конечно, параноик. Но легко представляю себе компилятор, в debug'е обнуляющий память, а в release — нет


у билдера, кажись 4 версии такой прикол был
Меняю два проигрывателя, на один выигрватель! Возможна доплата... ;)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.