Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из файла 
:(
    Опции темы
skrip
Дата 9.8.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.8.2006

Репутация: нет
Всего: нет



в файле file.txt есть две строки
ааа ааа ааа
ввв ввв ввв


не могу разобраться почему без помеченой знаками (!) строчке
вторая строка не прибавляется в st, а с ней все работет
замечательно. 
Код

#include <iostream.h>
#include <fstream.h>

void read_string(std::fstream &file, std::string &st)
    {
    char ch;
    while(ch != 10)
        {
        file.read((char*)&ch, 1);
        st+=ch;
        };
    };

std::fstream file;
std::string st;

int main()
{
    file.open("file.txt", std::ios::in);
    read_string(file, st);
    std::cout << file.tellg(); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    read_string(file, st);
    file.close();
    std::cout << st;
return 0;
};

PM MAIL   Вверх
likehood
Дата 9.8.2006, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



надо инициализировать переменную ch в ф-ии read_string (например нулём).
иначе её значение после первого вызова read_string не сбрасывается и остается равным 10
PM MAIL   Вверх
Rockie
Дата 9.8.2006, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



а также добавить условие окончания файла. например 
Код
while(ch!= 10 && !file.eof())



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
vinter
Дата 9.8.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56




Цитата

иначе её значение после первого вызова read_string не сбрасывается и остается равным 10

не согласен ch локальная переменная и после выхода из ф-ии перестает существовать, а при входе заново создается..
Просто компилятор постоянно "глючит" если пытается использовать неинициализированную переменную
Код

  char ch;//определил    
  while(ch != 10)//использует не пойми какое значение




--------------------
Мой блог
PM MAIL WWW   Вверх
dumb
Дата 9.8.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



vinter, согласен ты или не согласен, но при последовательном вызове одной и той же функции с неинициализированными стековыми переменными, значения оных с большой долей вероятности будут сохраняться от предыдущих вызовов.

Добавлено @ 18:31 
понятия "перестает существовать" и "заново создается" существуют только в теории. на практике все несколько иначе.
PM MAIL   Вверх
vinter
  Дата 9.8.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

огласен ты или не согласен, но при последовательном вызове одной и той же функции с неинициализированными стековыми переменными, значения оных с большой долей вероятности будут сохраняться от предыдущих вызовов.

конечно же вероятность существует, только очень призрачная.. Специально проверил ,5 раз вызывад ф-ю и не разу она не повторил значение переменной которым была проин. переменная внутри ф-ии!!!Неиниц. переменная помещается в регистр ,а не вынемается из него так что вероятность очень мала smile 
Слышали про такое понятие "Время жизни переменной"??
Цитата

понятия "перестает существовать" и "заново создается" существуют только в теории. на практике все несколько иначе.

Конечно же разработчики компиляторов подлые лгуны, а книги пишут полные ламеры smile 
Цитата

 на практике все несколько иначе.

не раскажете как??





Это сообщение отредактировал(а) vinter - 9.8.2006, 19:17


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 9.8.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Слышали про такое понятие "Время жизни переменной"??

стековая память для переменной не обнуляется, изменяется только указатель стека
а для объектоа классов компилятором генерируется вызов деструктора в месте выхода его за область видимости
в данном случае
происходит
Код

void read_string(std::fstream &file, std::string &st)
    {
    char ch;                                                   //   уменьшение SP на 1 и запись куда-нибудь текущего смещения в стеке
    while(ch != 10)
        {
        file.read((char*)&ch, 1);
        st+=ch;
        };
    }; // увеличение SP на 4+размер параметров функции

то есть сами данные неизменны, изменяется SP, значение ch сохраняется при втором вызове
так что baronp прав

Добавлено @ 20:28 
Цитата

не раскажете как??

в случае с POD-типами - просто изменение SP и контроль за использованием вне области видимости на этапе компиляции
в случае с объектами - вызов деструктора


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vinter
Дата 9.8.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



А стек тут причем??? неинициализированная переменная помещается не в стек , А в РЕГИСТР


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 9.8.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

А стек тут причем??? неинициализированная переменная помещается не в стек , А в РЕГИСТР 

где написано?
а тут
Код

int A()
{
    long a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w;
}

регистров не хватит  smile 
объекты тоже в регистры засовывать?  smile 

Это сообщение отредактировал(а) MAKCim - 9.8.2006, 20:38


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vinter
Дата 9.8.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Мы же говорим о конкретном примере.. Оптимизтрующий компилятор при обьявлении одной переменной скорее всего положит ее в регистр(для экономии времени).Не ну если много тогда конечно в стек...Но мы то имеем всего одну переменную...
Цитата

в случае с POD-типами

А это что такое(просто не знаю)?



--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 9.8.2006, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

Мы же говорим о конкретном примере.. Оптимизтрующий компилятор при обьявлении одной переменной скорее всего положит ее в регистр(для экономии времени).Не ну если много тогда конечно в стек...Но мы то имеем всего одну переменную...

спорный вопрос все-таки...
Цитата

А это что такое(просто не знаю)?

Цитата

A POD (plain old data) object has one of these data types--a fundamental type, pointer, union, struct, array, or class--with no constructor. Conversely, a non-POD object is one for which a constructor exists. A POD object begins its lifetime when it obtains storage with the proper size for its type and its lifetime ends when the storage for the object is either reused or deallocated.



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
dumb
Дата 10.8.2006, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



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

Цитата(vinter @  9.8.2006,  20:46 Найти цитируемый пост)
Мы же говорим о конкретном примере.. Оптимизтрующий компилятор при обьявлении одной переменной скорее всего положит ее в регистр(для экономии времени).Не ну если много тогда конечно в стек...Но мы то имеем всего одну переменную...

это зависит от компилятора, параметров компиляции, от того, как переменная используется, какого она типа, модели вызова функции итд итп.
а если уж речь зашла о конкретном случае, то компилятор никогда не "соптимизирует" переменную ch в регистр, ибо как-то так сложилось, что в качестве буфера для приема данных регистры не используются.
PM MAIL   Вверх
vinter
Дата 10.8.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



dumb мы на "ты" не переходили smile 
почитайте вот это
Цитата

а если уж речь зашла о конкретном случае, то компилятор никогда не "соптимизирует" переменную ch в регистр, ибо как-то так сложилось, что в качестве буфера для приема данных регистры не используются.

можно узнать откуда такие сведения(для собственного просвещения)
Цитата

 ты высказал немало утверждений(причем зачастую излишне эмоционально, да еще и сразу в двух темах), которые с действительностью никак не пересекаются.

где это? то что я назвал "инициализацией " немного другой процесс(что то я нигде не встречал стандарта по названиям), многие даже именитые авторы книг по программированию называют разными словами одинаковые вещи?? в сущности я не был неправ...




--------------------
Мой блог
PM MAIL WWW   Вверх
En_t_end
Дата 10.8.2006, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



vinter
Прикрепи сюда ассемблерный листинг этой программы твоего компилятора, тогда и спорам конец.
PM MAIL ICQ Skype GTalk Jabber   Вверх
vinter
Дата 10.8.2006, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



вот есть кусок кода:
Код

void read_string()
{
0041D2B0  push        ebp  
0041D2B1  mov         ebp,esp 
0041D2B3  sub         esp,0D8h 
0041D2B9  push        ebx  
0041D2BA  push        esi  
0041D2BB  push        edi  
0041D2BC  lea         edi,[ebp-0D8h] 
0041D2C2  mov         ecx,36h 
0041D2C7  mov         eax,0CCCCCCCCh 
0041D2CC  rep stos    dword ptr [edi] 
    char p;почему здесь ничего не происходит???Обьясните пожалуйста
    char ch = 10;    
0041D2CE  mov         byte ptr [ch],0Ah :вот кстати заносит значение в сегмент данных ,а не стека
    while(ch != 10)
0041D2D2  movsx       eax,byte ptr [ch] 
0041D2D6  cmp         eax,0Ah 
0041D2D9  je          read_string+31h (41D2E1h) 
    {
          ch = 10;    
0041D2DB  mov         byte ptr [ch],0Ah 
        };    
0041D2DF  jmp         read_string+22h (41D2D2h) 
}

попробуйте посмотрите при отладке значение переменной...у меня оно ни разу не установилось в 10 при опред. без инициализации


--------------------
Мой блог
PM MAIL WWW   Вверх
MAKCim
Дата 10.8.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



vinter, где тут видно что
Код

mov byte ptr [ch], 0Ah

записывает в сегмент данных
адрес куда указывает ch неизвестен (может быть он стековый)
а сама ch в сегменте данных


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vinter
Дата 10.8.2006, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



На сколько я помню если в скобках не указаны [bp] или [sp] по умолчанию префиксом ставится сегмент данных...отсюда и мои выводы


--------------------
Мой блог
PM MAIL WWW   Вверх
dumb
Дата 11.8.2006, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



vinter,
Цитата(vinter @  10.8.2006,  18:20 Найти цитируемый пост)
dumb мы на "ты" не переходили smile

[off]мне никуда переходить не надо - так принято в сети. но если Вы настаиваете... имейте ввиду: тон такого общения считается "напряженным", а "выкающий" собеседник выдает в себе высокомерие, либо агрессивный настрой, даже если на самом деле это не так.[/off]

Цитата(vinter @  10.8.2006,  18:20 Найти цитируемый пост)
Цитата

а если уж речь зашла о конкретном случае, то компилятор никогда не "соптимизирует" переменную ch в регистр, ибо как-то так сложилось, что в качестве буфера для приема данных регистры не используются.

можно узнать откуда такие сведения(для собственного просвещения)

попробуйте еще раз перечитать предложение и подумать над его смыслом.

Цитата(vinter @  10.8.2006,  18:20 Найти цитируемый пост)
где это? то что я назвал "инициализацией " немного другой процесс(что то я нигде не встречал стандарта по названиям), многие даже именитые авторы книг по программированию называют разными словами одинаковые вещи?? в сущности я не был неправ...

везде - все Ваши предложения, описывающие работу компилятора или организацию данных, содержат как терминологические, так и смысловые ошибки. когда именитые авторы вводят свои понятия, они ими четко смысл передают.

Цитата(vinter @  10.8.2006,  18:20 Найти цитируемый пост)
почитайте вот это

итак, человек, который пытается доказывать "призрачные вероятности", используя при этом Debug версию, отправляет меня читать Как пережить release-версию!
Код

void read_string()
{
0041D2B0  push        ebp
0041D2B1  mov         ebp,esp 
0041D2B3  sub         esp,0D8h ; выделение места под стековые переменные
  ; много для двух чаров? так это дебаг-версия добавила кусок к переменным,
  ; дабы потом целостность стека проверить.
0041D2B9  push        ebx  
0041D2BA  push        esi  
0041D2BB  push        edi  
0041D2BC  lea         edi,[ebp-0D8h] ; заполнение выделенного куска значениями "0xCC"
  ; сие заполнение и является средством борьбы с неинициализированными данными.
  ; 0xCC - на всякий случай, если вдруг "переполнуха" приключится
0041D2C2  mov         ecx,36h 
0041D2C7  mov         eax,0CCCCCCCCh 
0041D2CC  rep stos    dword ptr [edi] ; закончили заполнять
    char p
  ;>почему здесь ничего не происходит???Обьясните пожалуйста
  ; а тут и не должно ничего происходить - место под переменную уже выделено.
    char ch = 10;    
0041D2CE  mov         byte ptr [ch],0Ah
  ;>вот кстати заносит значение в сегмент данных ,а не стека
  ; уважаемый, Вам же символьное имя показывают, а если б не показывали,
  ; то здесь было бы что-то около byte ptr [ebp-8]
    while(ch != 10)
0041D2D2  movsx       eax,byte ptr [ch] 
; ...

Цитата(vinter @  10.8.2006,  19:26 Найти цитируемый пост)
попробуйте посмотрите при отладке значение переменной...у меня оно ни разу не установилось в 10 при опред. без инициализации

занавес!

Цитата(vinter @  10.8.2006,  20:26 Найти цитируемый пост)
На сколько я помню если в скобках не указаны [bp] или [sp] по умолчанию префиксом ставится сегмент данных...отсюда и мои выводы

чтобы не было таких "непоняток", переменные надо называть bp и sp. smile
а память хорошая. даже слишком. мы уже давно живем в 32-битном мире. пытаемся даже на 64 переползти... smile

ps. даа... такое количество букв вредно как для физического здоровья пишущего, так и для психического - читающего. user posted image
pss. да... обижать никого не хотел, если вышло едковато, уж простите - сами такой импульс дали. user posted image
PM MAIL   Вверх
Damarus
Дата 11.8.2006, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 6
Всего: 29



Цитата(vinter @  10.8.2006,  19:20 Найти цитируемый пост)
можно узнать откуда такие сведения(для собственного просвещения)

vinter, а как Вы себе представляете применение операции взятия адреса (file.read((char*)&ch, 1);) к переменной, находящейся в регистре smile 


Это сообщение отредактировал(а) Damarus - 11.8.2006, 07:39
PM MAIL ICQ Jabber   Вверх
likehood
Дата 11.8.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Цитата(vinter @  10.8.2006,  20:26 Найти цитируемый пост)
попробуйте посмотрите при отладке значение переменной...у меня оно ни разу не установилось в 10 при опред. без инициализации


Для такого кода
Код

void f() {
  int c;
  std::cout << c << "\n";
  c = 10;
}

int main() {
  f(); f(); f(); f(); f();
  return 0;
}

g++ выдал одно "левое" число и четыре десятки.


PM MAIL   Вверх
vinter
Дата 11.8.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата

[off]мне никуда переходить не надо - так принято в сети.[/off]

OK 
Цитата

а как Вы себе представляете применение операции взятия адреса (file.read((char*)&ch, 1);) к переменной, находящейся в регистре

никак.. прочитал статью там так написано..
Цитата

итак, человек, который пытается доказывать "призрачные вероятности", используя при этом Debug версию, отправляет меня читать Как пережить release-версию!

а тебе прочитать тяжело было?? Там как раз и написано про оптимизацию!
Цитата

еловек, который пытается доказывать "призрачные вероятности", 

я как раз и доказывал отсутствие данной верятности!
Цитата

везде - все Ваши предложения, описывающие работу компилятора или организацию данных, содержат как терминологические, так и смысловые ошибки. когда именитые авторы вводят свои понятия, они ими четко смысл передают.

  smile 
dumb а вообще было бы просто замечательно если бы ты приводил бы еще какие нибудь факты к своим высказываниям..
Цитата

Для такого кода


void f() {    
  int c;    
  std::cout << c << "\n";    
  c = 10;    
}    
int main() {    
  f(); f(); f(); f(); f();    
  return 0;    
}    

g++ выдал одно "левое" число и четыре десятки.


Visual c++ 6.0,VS 2003 .NET и BC 3.1 все выдали постороннее значение smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
Ignat
Дата 11.8.2006, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 3
Всего: 73



Цитата(vinter @  11.8.2006,  10:45 Найти цитируемый пост)
все выдали постороннее значение

Но одно и тоже, исключая первое smile

Добавлено @ 10:06 
Во...

Код

C:\temp>cl test.cpp /EHsc

test.cpp
c:\temp\test.cpp(6) : warning C4700: local variable 'c' used without having been
 initialized

/out:test.exe
test.obj

C:\temp>test
1
1310640
1310640
1310640
1310640



--------------------
Теперь при чем :P
PM   Вверх
vinter
Дата 11.8.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



у меня во всех случаях -858993460 при Debug  и 1 при Release 
с cout'ом в bc 3.1 так же как у baronp 


Это сообщение отредактировал(а) vinter - 11.8.2006, 10:44


--------------------
Мой блог
PM MAIL WWW   Вверх
dumb
Дата 11.8.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 8
Всего: 158



vinter,
читать, то что пишут, надо, а не комментировать.
ты постоянно аппелируешь к результатам, которые тебе выдает debug версия проекта. а в той статье как-раз написано про проблемы, возникающие при переходе от дебага к релизу. одной из них и посвящен этот топик - неинициализированные переменные. тут читай внимательно: debug версия собирается с ключами, заставляющими компилятор генерировать код, заполняющий выделенное под переменные место определенными значениями. инициализирует он все переменные значением 0xCC, дабы проще было ловить оставленные без инициализации. в release версии нет этого кода! - в переменных содержится мусор, который остался от работы других переменных, адресов возврата, параметров функций итд - все, что помещается в стэк(мы говорим о локальных переменных)

твое -858993460 и есть 0xCCCCCCCC. собери уже наконец release версию любого из приведенных здесь исходников.

Добавлено @ 10:53 
пока писал, похоже, произошло чудо... smile
PM MAIL   Вверх
vinter
Дата 11.8.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



dumb а сразу не мог аргументировать свои ответы...Всем спасибо что просветили  smile 


--------------------
Мой блог
PM MAIL WWW   Вверх
Dragon
Дата 11.8.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 10.8.2006
Где: Киев

Репутация: нет
Всего: нет



Ну, вообще-то по стандарту использование неинициализированной переменной leads to undefined behavior. И это грубая ошибка. И даже если какой-то компилятор будет стабильно создавать ch в той же ячейке памяти, то все это делать определенно не будут - что сделает программу непортируемой и зависимой от типа/версии компилятора. 

Плюс, действительно некоторые компиляторы, вроде msvc действительно инициализируют все неинициализированные переменные 0 при Debug сборке smile Но расчитывать на это...


Это сообщение отредактировал(а) Dragon - 11.8.2006, 12:29
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1344 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.