класс — Случайные буквы в C ++ struct

Итак, у меня есть структура, которую я создаю, которую я также могу создать класс, но когда я пытаюсь получить их свойства … она дает мне случайные буквы. Как совершенно случайно. Я вижу такие вещи, как «(▌ ¶∞ ♥! ¶ ↑ ♥! ¶≤ ≈ ¶⌠ ☻! ¶≈ Ç┌ ¶√ Φ`◄¶ ◄▬¶Ç┌ ¶√ Ç☻V ♫ √ ╨┘ ¶⌠ ¶⌠ ¶⌠ 0│ «.

Я сократил это до чего-то совершенно базового, и я до сих пор не понимаю, почему он это делает.

struct Example
{
const char* Whatever = "Hello";
};

И когда я делаю это

Example* exampleObj;
print(exampleObj->Whatever);

Это поднимает случайные буквы. Случайные буквы варьируются от исполнения к выполнению программы.

-1

Решение

Указатель — это переменная, которая содержит адрес в памяти, где находится объект. Поэтому объявления указателя недостаточно, вам также нужно создать что-то, на что он будет указывать. Это означает, что вам нужно выделить немного памяти, в которую вы можете поместить свой объект.

Example* exampleObj; // at the moment exampleObj contains spurious data

Это просто указатель. Но вы не создали ничего, на что можно было бы указать. Если вы попытаетесь получить к нему доступ, вы получите ложный мусор!

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

Example* exampleObj = new Example; // new returns a chunk of valid memory

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

НОТА:

Часто нет необходимости выделять ваши объекты вручную, используя new, Вместо этого вы можете использовать automatic переменная, а не указатель:

Example exampleObj; // note no * means its not a pointer but a whole object

РЕШЕНИЕ:

Таким образом, у нас есть 2 способа решить вашу проблему. Создать new объект и назначить его адрес указателю или создать automatic объект:

// Solution 1:
Example* exampleObj = new Example; // Must remember to delete (smart pointer?)
print(exampleObj->Whatever);

// Solution 2 (usually MUCH better)
Example exampleObj;
print(exampleObj.Whatever); // note: uses . rather than ->
2

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


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