Russian Qt Forum

Программирование => С/C++ => Тема начата: ltise от Январь 22, 2011, 22:50



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

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

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

B итоге, собираю на РС - все пашет, собираю на маке - не пашет :)


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: Sancho_s_rancho от Январь 22, 2011, 23:09
Можно  в списке инициализации, можно в конструкторе. Ну а для int можно и прямо на  месте.


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: ltise от Январь 22, 2011, 23:21
Можно  в списке инициализации, можно в конструкторе. Ну а для int можно и прямо на  месте.
Вопрос в другом - если я забыл проинициализировать поле ?
у меня всегда в этом поле будет значение = 0..

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




Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: Akon от Январь 22, 2011, 23:56
Ну если экземляры классов создаются через operator new(), то можешь переопределить его и инициализировать выделенную память случайным образом. Но лучше не забывать инициализацию.



Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: alexman от Январь 23, 2011, 00:24
Так это в debug нулями? В release скорее всего будет "хлам".


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: alexman от Январь 23, 2011, 00:26
А вообще Valgrind используй! Но это под Linux.


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: ltise от Январь 23, 2011, 00:29
Так это в debug нулями? В release скорее всего будет "хлам".
да, надо в debug получить хлам


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: ltise от Январь 23, 2011, 01:12
А вообще Valgrind используй! Но это под Linux.
Может вообще имеет смысл переехать под линух ? :)
Совместимость с маком от этого увеличится ?


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

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


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: Igors от Январь 23, 2011, 11:34
У MSVC есть run-time проверка на чтение неинициализированных переменных. Может лучше ее включить чем возиться с хламом?


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: brankovic от Январь 23, 2011, 12:47
А вообще Valgrind используй! Но это под Linux.
Может вообще имеет смысл переехать под линух ? :)
Совместимость с маком от этого увеличится ?


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

Но вообще-то проблема преувеличена. Надо просто переменные инициализировать ;)


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: Akon от Январь 23, 2011, 13:13
У MSVC есть run-time проверка на чтение неинициализированных переменных. Может лучше ее включить чем возиться с хламом?

Для членов классов это не работает.


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: Fat-Zer от Январь 23, 2011, 13:36
Но вообще-то проблема преувеличена. Надо просто переменные инициализировать ;)
У ТС, как я понял как раз и проблема, как проще отлавливать переменные, которые забыл инициализировать.


Название: Re: Заполнить используемую приложением память "хламом"
Отправлено: ltise от Январь 23, 2011, 13:43

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

Цитировать
Но вообще-то проблема преувеличена. Надо просто переменные инициализировать ;)
конечно надо :) а если где-то забыл ? и все зашибись пашет ?