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

ЭТОТ ВОПРОС ЗАКРЫТ, ПОТОМУ ЧТО ОН НЕ ВИДИТ РЕАЛЬНОГО ВОПРОСА К НЕКОТОРЫМ ЛЮДЯМ С тех пор я обновил тело вопроса и, может быть, сейчас он немного лучше. Тем не менее, я ожидаю, что вы все предложите, как я могу улучшить этот вопрос, так как это моя работа и исследования в этой области.

Теория RAII (распределение ресурсов — инициализация) гласит, что если я заимствую память у MMU, мне нужно вернуть ее обратно (new и delete). Тем не менее, мне было интересно, что последствия будут, если я буду делать плохие практики инициализации в C ++.

Что если я сделаю следующее:

double* pp1 = 0;
double* pp2 = 0;

А потом использовать pp1 и pp2 где-то мне нужно? Это неправильный способ инициализации указателя в соответствии со стандартной практикой программирования? Или это вообще инициализация. Зависит ли полностью инициализация от new оператор?

И сколько нужно использовать указателей в дизайне, который:

1) в режиме реального времени
2) Критическая безопасность
3) Миссия Критическая

Кроме того, я нахожу странные результаты при запуске одного и того же приложения C / C ++ на 32-разрядных и 64-разрядных компьютерах. Насколько сильно моя машина станет медленной / неэффективной, если я буду возиться с указателями. Потому что моя машина работает медленно из-за слишком большого количества указателей в моем дизайне. Для некоторых «очевидных» соглашений о неразглашении я не могу разместить здесь свой код. Я так сожалею об этом. И для ясности, я удаляю все указатели, используемые в каждом методе, непосредственно перед тем, как вернуть результаты, т. Е. Мое управление памятью хорошо сбалансировано и достаточно эффективно, чтобы не вызывать проблемы переполнения стека.

Я знаю, что эти вопросы могут быть слишком открытыми, но я также изучаю (Google, MISRA C ++, Британское компьютерное общество и IEEE), чтобы найти подробный ответ. Моя идея состоит в том, чтобы на самом деле исследовать и разработать способ программирования на C ++ без частого использования указателей.

Я знаю, что очевидный ответ таков: «Вы программируете на C ++, так что вы можете использовать указатели и перестать злоупотреблять MMU вашего ПК». Но если у кого-то есть другие мысли, я хотел бы услышать об этом.

-8

Решение

Что было бы наиболее подходящей практикой использования указателей?

В этом случае ответ будет не использовать их вообще. Что не так с просто

double p1 = 1.1;
double p2 = 2.2;

Если нужно, оберните их в умный указатель:

Защита от утечек памяти с помощью умного указателя:

std::unique_ptr<double> pp1;

Если вы должны использовать сырые указатели (сомнительно), инициализируйте nullptr:

предпочитать nullptr над NULL или же 0:

double* pp1 = nullptr;
double* pp2 = nullptr;

Вы не можете разыменовать указатель, пока не сделаете так, чтобы он указывал на правильное местоположение:

pp1 = new double(1.1);

*pp1; //VALID
*pp2; //UNDEFINED BEHAVIOR - pp2 is still nullptr
6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]