The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Безопасно ли так переопределять указатели?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Безопасно ли так переопределять указатели?"  +/
Сообщение от CR on 20-Сен-11, 00:04 
Есть какой-то буфер buf, и есть указать на данные внутри этого буфера *ptr. Есть функция foo (в примере ниже), которая ищет определённые данные в нашем буфере, начиная с указателя *ptr. Указатель на найденные данные помещается в указатель **trg. Я сильно упростил функцию foo и не передаю длину буфера, считаем что за границы нашего буфера мы гарантированно не выходим. Вопрос в том, что будет, если в качестве аргументов для этой функции я передам один и тот же указатель, как показано в примере ниже. Данный пример компилится и работает, но могут ли возникнуть проблемы при какой-нибудь хитрой оптимизации кода? Безопасно ли переопределять указатель внутри функции таким образом, как показано в примере?

unsigned char buf[4]={1,2,3,4};

void foo(unsigned char *ptr, unsigned char **trg)
{
    *trg = &ptr[2];
}

int main ()
{
    unsigned char *ptr;

    ptr = buf;
    foo(ptr, &ptr);

    return 0;
}

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Безопасно ли так переопределять указатели?"  +1 +/
Сообщение от Razzeeyy on 20-Сен-11, 01:00 
с виду нет ничего плохого, просто исходный указатель затрет новыми данными
главное "логически" не ошибится при этой самой перезаписи указателя, а то выйдет что будут утеряны/неправильно обработаны данные.
даже скомпилил, запустил, только для наглядности заменил {1,2,3,4} на "123"
cout<<ptr; выдал 3, что и следовало ожидать.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Безопасно ли так переопределять указатели?"  +/
Сообщение от JohnProfic (ok) on 20-Сен-11, 12:06 
Параметры функции всегда вычисляются до её вызова. Что происходит с ними внутри этой функции дело десятое. В данном случае нет ничего страшного :). А уж если компилятор напортачит, то это будет его, требующая исправления, ошибка.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Безопасно ли так переопределять указатели?"  +/
Сообщение от CR on 21-Сен-11, 23:07 
Ок, спасибо.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру