Ошибка при использовании delete - C (СИ)
Формулировка задачи:
#include <iostream>
#include <stdio.h>
using namespace std;
void main()
{
char *ar=new char [128];
ar="12345qwer";
cout<<ar<<"\n";
delete [] ar;
}
Я даже не знаю откуда она может взяться (создал , присвоил ,очистил).
Решение задачи: «Ошибка при использовании delete»
textual
Листинг программы
#include <iostream>
#include <stdio.h>
using namespace std;
void main()
{
char *ar=new char [128];
// ar="12345qwer";
strcpy(ar, "12345qwer");
cout<<ar<<"\n";
delete [] ar;
}
Объяснение кода листинга программы
В этом коде:
- Создается массив символов типа char с размером 128 элементов и инициализируется нулевыми значениями.
- Используется функция strcpy для копирования строки
12345qwerв начало массива ar. - Выводится содержимое массива ar с помощью оператора cout.
- Используется оператор delete для освобождения памяти, выделенной под массив ar. Проблема в этом коде заключается в том, что функция strcpy пытается скопировать строку в неизменяемый массив, что приводит к неопределенному поведению программы. Правильный способ копирования строки в массив символов - использовать функцию strncpy, которая копирует строку, не превышая размер целевого массива.