AlbusDambldor
@AlbusDambldor

Что в моем коде не так?

Задача была такая: Создать функцию, позволяющую удалять указанное количество элементов, начиная с произвольного индекса массива.
Указатель на исходный массив и значение размера исходного массива должны изменить свое значение внутри функции.

#include<iostream>
#include<time.h>

using namespace std;

int* Function1(int*& ptr, int& size, int index, int del);
void InitArray(int* ptr, int size);
void ShowArray(int* ptr, int size);

void main() {
	setlocale(LC_ALL, "Rus");

	int* ptr = nullptr;
	int size = 0;
	int del = 0;
	cout << "Введите размер массива: ";
	cin >> size;
	int index = rand() % size + 1;

	InitArray(ptr, size);
	ShowArray(ptr, size);

	Function1(ptr, size, index, 1);
	ShowArray(ptr, size);
}

void InitArray(int* ptr, int size) {
	if (ptr == nullptr || size <= 0)
		return;
	for (int i = 0; i < size; ++i) {
		ptr[i] = rand() % 20 + 1;
	}
}
void ShowArray(int* ptr, int size) {
	if (ptr == nullptr || size <= 0)
		return;
	for (int i = 0; i < size; ++i) {
		cout << ptr[i] << " ";
	}
	cout << endl;
}

int* Function1(int*& ptr, int& size, int index, int del) {
		if (ptr == nullptr || size <= 0 || index > size || index < 0 || size < del) {
			return nullptr;
		}
		int* temp = 0;
		for (int i = 0; i < size; ++i) {

			if (i < index) {
				temp[i] = ptr[i];
			}
			else if (i == index) {
				for (int j = index; j <= del; ++j) {
					cout << " ";
				}
			}
			else if (i > index) {
				temp[i] = ptr[i - 1];
			}
		
		}
		return temp;
}
  • Вопрос задан
  • 352 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Память для массив ptr в начале программы не выделяется, соответственно в InitArray() будет ошибка доступа к памяти.
Неполное условие в начале функции Function1() - не учтён вариант, когда index+del > size. Остальную часть функции Function1() надо переписывать полностью, неверна вся логика работы.
Ответ написан
Комментировать
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
Почему вы не выделяете память? С чем должны работать ваши функции?
int index = rand() % size + 1;
Весьма оригинальное UB, будет падать в очень очень редком случае. "+1" здесь не нужен.
int* Function1(int*& ptr, int& size, int index, int del)

Это вообще непонятно что. Зачем ссылки? И зачем вы внутри функции ходите по чужой памяти?
Ответ написан
Комментировать
int* ptr = nullptr;
...
InitArray(ptr, size);


У вас указатель инициализирован нулем. Он указывает в никуда.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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