Работа с памятью C++ (new, delete)

196
05 июня 2018, 22:30

Простейший вопрос. Есть следующий код:

char* name = new char[10];
name = "Name\0";
delete[] name;

Простейший пример, который вроде бы должен работать. Однако программа просто падает без сообщений об ошибках. Отладчик после попытки выполнения последней строчки выдает следующее:

Source information is missing from the debug information for this module

Что посоветуете? VS17, Win10.

Answer 1

Давайте разберем...

char* name = new char[10];

Выделили память, сохранили адрес в name

name = "Name\0";

Выбросили этот адрес, заменили на адрес строки "Name\0" (кстати, еще один нолик добавит компилятор - к строковому литералу) где-то в сегменте данных.

delete[] name;

Пробуем удалить память в сегменте данных, где лежит строка... Правда, ничего удивительного, что это не получается? :)

Надо строку скопировать в выделенную память.

char* name = new char[10];
strcpy(name, "Name");
delete[] name;

Ну, или - предваряя ваш вопрос -

char* name = new char[10];
strcpy_s(name, 10, "Name");
delete[] name;
READ ALSO
Как в переменную записать слово,не используя массив?

Как в переменную записать слово,не используя массив?

Допустим , идет поиск наибольшего числа, и имя человека с наибольшим числом очковЕго имя должно записаться в, скажем ,тип char , string

221
jni и cpp пакеты в android проекте

jni и cpp пакеты в android проекте

Наверное, очень глупый вопрос, но никак не могу найти на него ответа

193
стек на основе односвязного списка C++

стек на основе односвязного списка C++

Не могу сообразить, как проверить на пустоту стек:

203