Пишу функцию на с++ типа:
solve(vector<vector<int>> &matrix);
Вроде ничего сложного, просто передается аргумент по ссылке. Как я понял, с точки зрения ассемблера это просто адрес matrix положенный на стек. Решил протестировать
ее, и на одном сайте на стек кладут nullptr и программа аварийно завершается.
Первый вопрос: можно ли на своем ПК встретить такую же ситуацию, когда при передаче аргумента по ссылке на стек кладется nullptr?
Второй вопрос: как же все-таки отловить такую ошибку, так как любое обращение к matrix сразу ведет к разыменование нулевого указателя и аварийному завершению?
В С++ ссылка не может содержать nullptr. Отсюда следует, что проверять на наличие nullptr смысла нет.
Ну, если вы думаете, что кому-то не лень издеваться над кодом вот так:
#include <iostream>
#include <iomanip>
using namespace std;
void f(int&i)
{
cout << i << endl;
}
int main(int argc, const char * argv[])
{
int& i = *static_cast<int*>(nullptr);
f(i);
}
то можно на всякий случай вставить проверку:
void f(int&i)
{
if (&i == nullptr)
{
cout << "Не надуришь!\n";
}
else
{
cout << i << endl;
}
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости