Будут ли какие-либо возможные проблемы с объявлением значения указателя в отдельных строках в C ++ вместо использования функции 'new'? - PullRequest
0 голосов
/ 07 марта 2020

Я новичок в C ++ и в настоящее время испытываю трудности с указателями.

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

#include <iostream>

using namespace std;

int main(){
    // method 1
    int* n;
    *n = 2;
    cout << "address of n in main(): " << n << "\n"; //returns 0
    cout << "value inside of n in main(): " << *n << "\n"; // returns 2

    // method 2
    int* m = new int(2);
    cout << "address of m in main(): " << m << "\n"; //returns some address
    cout << "value insdie of m in main(): " << *m << "\n"; // returns 2
}

Первый метод возвращает следующее:

address of n in main(): 0
value inside of n in main(): 2

Второй метод возвращает следующее:

address of m in main(): 0x6c2cc0
value inside of m in main(): 2

Q1. Какие могут быть проблемы с address of n in main():0? (он ведет себя так только на онлайн-компиляторе, извините. Не обращайте внимания на этот вопрос.)

Q2. Как называется «новый» метод объявления?

1 Ответ

1 голос
/ 07 марта 2020

Какие могут быть проблемы с наличием «адреса n в main (): 0»?

Если вам повезет, сбой программы из-за segfault. Если это не так, повреждение памяти, неопределенное поведение и т. Д. c.

Причина заключается в том, что вы используете фактически случайный адрес памяти, который не был сопоставлен / зарезервирован / выделен для вашего процесса.

Как называется «новый» метод объявления?

Для «метода» нет «имени». new - это ключевое слово и оператор тоже. Это стандартный способ выделения памяти в C ++. Хотя почти во всех случаях вы будете использовать контейнер, который будет управлять памятью, например std::vector или std::unique_ptr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...