Пишу функцию на с++ типа:
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;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Здравствуйте, имею задачу получить список содержимого между пар (
Есть QTableView, нужно чтобы ее размеры подгонялись по размеру содержимогоНо не флаг Stretch в хедерах
Предположим, у меня есть std::vector<int> vec1 размера nТакже есть RandomAccessIterator begin и end, которые принадлежат другому вектору vec2 такого же размера