Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Передача не иницализированого указателя в функцию


Автор: gamedeveloper 31.3.2008, 21:27
Есть простая функция которая, принимает не инициализированный указатель, но инициализирует его сама и ложит в память под указатель нужные данные.
Код

void func(void *p) {
    ptr = new char[255];
    //...
}

void main() {

    void *ptr;
    func(ptr);

}


Visual Stodio 2005, при трассировке программы, выдаёт ошибку: The variable 'ptr' is being used without being defined. Версия проекта - отладочная. Если поставить релиз версию, то ошибка не выскакивает.

Вопрос: не опасны ли такие действия и как можно отключить эту ошибку при трассировке проекта в отладочном режиме?


Автор: Rififi 31.3.2008, 21:37
в первой строчке функции наверное имелось в виду p = ...
такая запись смысла не имеет. всё изменения, проведённые с переменной p, не будут видны извне функции. поэтому туда нужно передавать либо инициализированный указатель, либо двойной указатель (Си-стиль), 
Код
void f(void** p)
{
    *p = new char[100];
}
func(&ptr);

либо ссылку на указатель (С++ стиль)
Код
void f(void*& p)
{
    p = new char[100];
}
func(ptr);

Автор: 586 31.3.2008, 21:37
уделено

Автор: Daevaorn 31.3.2008, 21:37
Цитата(gamedeveloper @  31.3.2008,  22:27 Найти цитируемый пост)
ложит 

 smile 
Цитата(gamedeveloper @  31.3.2008,  22:27 Найти цитируемый пост)
не опасны ли такие действия

опасны. так делать не надо.
Цитата(gamedeveloper @  31.3.2008,  22:27 Найти цитируемый пост)
можно отключить эту ошибку при трассировке проекта в отладочном режиме?

можно, но не нужно.

Код, если честно - бредовый.

Автор: Rififi 31.3.2008, 21:39
Цитата
Если поставить релиз версию, то ошибка не выскакивает

скорее всего, в релизной версии уменьшен уровень варнингов.
всегда выставляй максимальный уровень (/W4)

Автор: korian 31.3.2008, 22:06
Код

void func(void *& p) {
    p = new char[255];
    //...
}

void main() {

    void *ptr;
    func(ptr);

}


Автор: gamedeveloper 31.3.2008, 23:50
Спасибо всем. Всё работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)