Код работает, но в конце выкидывает «Debug Error», почему?

Задача: Напишите функцию, которая добавляет рядом с пробелом еще один (случае где два и больше подряд пробелов не учитываем). Функция должна принимать в качестве аргументов строку (массив символов). Функция должна возвращать новую сформированную строку.
В общем программа работает , но, в конце вот такая табличка: 5fa6c92cddea7423034666.jpeg
КОД:
#include "pch.h"
#include <iostream>
#include <Windows.h>
void add_spaces(char* a) 
{
	int count = 0;
	for (int i = 0; i < strlen(a); i++) 
	{
		if (a[i] == ' ')
			count++;
	}
	char* new_arr = new char[strlen(a) + count];
	for (int i = 0, j = 0; i < strlen(new_arr); i++, j++) 
	{
		if (a[j] == ' ')
		{
			new_arr[i] = ' ';
			new_arr[i + 1] = ' ';
			i++;
		}
		new_arr[i] = a[j];
	}
	for (int i = 0; i < strlen(new_arr); i++) 
	{
		std::cout << new_arr[i];
	}
	delete[]new_arr;
}
int main()
{
	using namespace std;
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	char a[] = " ";
	cout << "Введите строку: ";
	cin.getline(a, 128);
	cout << "\nСтрока после добавления пробелов: ";
	add_spaces(a);
}
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
У вас в массиве new_arr после выделения памяти находится мусор, а вы обращаетесь к функции strlen(new_arr) для вычисления длины строки с мусором в памяти. Эта функция работает некорректно, выдает значение не соответствующее действительности. Затем вы заполняете память, которую не выделяли (в new_arr[i]). При попытке ее удалить через delete[] у вас появляется heap corrupt.
PS. используя с++, используйте std::string
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы