Russian Qt Forum
Ноябрь 23, 2024, 22:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Заполнить используемую приложением память "хламом"  (Прочитано 5220 раз)
ltise
Гость
« : Январь 22, 2011, 22:50 »

Добрый день!
подскажите плиз как заполнить выделяемую приложению память случайными значениями "хламом" ?
Проблема в следующем - если где-то в проекте забыл проинициализировать поле, то на некоторых PC (почему-то у меня так) значение не инициализированного поля в классе (например int) = 0... и вроде все пашет как надо.
Когда приложение собирается на маке, то значение оказывается не определенным .. и все валица...

т.е.
class SomeClass
{
    SomeClass(){}
  
    void outIndex()
    {
        qDebug() << index;
    }
private:
    int index;
}
Забыл проинициализировать в конструкторе index.

На PC (по крайней мере на моем в Debug)  выводится всегда "0"...
Собираю на маке - выводится все что угодно...

B итоге, собираю на РС - все пашет, собираю на маке - не пашет Улыбающийся
« Последнее редактирование: Январь 22, 2011, 22:55 от ltise » Записан
Sancho_s_rancho
Гость
« Ответ #1 : Январь 22, 2011, 23:09 »

Можно  в списке инициализации, можно в конструкторе. Ну а для int можно и прямо на  месте.
Записан
ltise
Гость
« Ответ #2 : Январь 22, 2011, 23:21 »

Можно  в списке инициализации, можно в конструкторе. Ну а для int можно и прямо на  месте.
Вопрос в другом - если я забыл проинициализировать поле ?
у меня всегда в этом поле будет значение = 0..

мне нужно сделать так, что-бы значение, если забыл проинициализировать, было неопределено, случайное...что-бы можно было поймать косяк на РС


Записан
Akon
Гость
« Ответ #3 : Январь 22, 2011, 23:56 »

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

Записан
alexman
Гость
« Ответ #4 : Январь 23, 2011, 00:24 »

Так это в debug нулями? В release скорее всего будет "хлам".
Записан
alexman
Гость
« Ответ #5 : Январь 23, 2011, 00:26 »

А вообще Valgrind используй! Но это под Linux.
Записан
ltise
Гость
« Ответ #6 : Январь 23, 2011, 00:29 »

Так это в debug нулями? В release скорее всего будет "хлам".
да, надо в debug получить хлам
Записан
ltise
Гость
« Ответ #7 : Январь 23, 2011, 01:12 »

А вообще Valgrind используй! Но это под Linux.
Может вообще имеет смысл переехать под линух ? Улыбающийся
Совместимость с маком от этого увеличится ?
Записан
Fat-Zer
Гость
« Ответ #8 : Январь 23, 2011, 11:17 »

А вообще Valgrind используй! Но это под Linux.
Может вообще имеет смысл переехать под линух ? Улыбающийся
Совместимость с маком от этого увеличится ?

Для совместимости вполне достаточно сменить компилятор(вы ведь MSVC используете?). Или даже просто его параметры, не знаю, что именно придумала корпорация зла, но наверняка у них есть опции, чтобы отключить автоматическую инициализацию переменных.
Из своего опыта: ХРюшка+MinGW оставляют переменные не инициализированными.
ЗЫ: я всегда за переход на linux Подмигивающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Январь 23, 2011, 11:34 »

У MSVC есть run-time проверка на чтение неинициализированных переменных. Может лучше ее включить чем возиться с хламом?
Записан
brankovic
Гость
« Ответ #10 : Январь 23, 2011, 12:47 »

А вообще Valgrind используй! Но это под Linux.
Может вообще имеет смысл переехать под линух ? Улыбающийся
Совместимость с маком от этого увеличится ?


Не знаю про мак, но когда пишу на кьют, то под линукс, а виндовс держу в виртуальной машине, там тестирую дополнительно. Наверное и мак ос туда можно запихнуть. Привык я просто к инструментам линукса, валгринд опять же.

Но вообще-то проблема преувеличена. Надо просто переменные инициализировать Подмигивающий
Записан
Akon
Гость
« Ответ #11 : Январь 23, 2011, 13:13 »

У MSVC есть run-time проверка на чтение неинициализированных переменных. Может лучше ее включить чем возиться с хламом?

Для членов классов это не работает.
Записан
Fat-Zer
Гость
« Ответ #12 : Январь 23, 2011, 13:36 »

Но вообще-то проблема преувеличена. Надо просто переменные инициализировать Подмигивающий
У ТС, как я понял как раз и проблема, как проще отлавливать переменные, которые забыл инициализировать.
Записан
ltise
Гость
« Ответ #13 : Январь 23, 2011, 13:43 »


Цитировать
Не знаю про мак, но когда пишу на кьют, то под линукс, а виндовс держу в виртуальной машине, там тестирую дополнительно. Наверное и мак ос туда можно запихнуть. Привык я просто к инструментам линукса, валгринд опять же.
пробую andLinux

Цитировать
Но вообще-то проблема преувеличена. Надо просто переменные инициализировать Подмигивающий
конечно надо Улыбающийся а если где-то забыл ? и все зашибись пашет ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.113 секунд. Запросов: 22.