Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2016, 10:13   #1
numberonee
Новичок
Джуниор
 
Регистрация: 19.06.2016
Сообщений: 4
По умолчанию Оставляет в массиве array не более n элементов, начиная с индекса first.

void slice (Array *array, int first, int n);
Оставляет в массиве array не более n элементов, начиная с индекса first.

Код:
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void* mymalloc(size_t size) {
void *result = malloc(size);
if (result == NULL) {
fprintf(stderr, "mymalloc: не удалось выделить %zd байт\n", size);
exit(EXIT_FAILURE);
}
return result;
}

void* myrealloc(void *ptr, size_t size) {
void *res = realloc(ptr, size);
if (res == NULL && size != 0) {
fprintf(stderr, "myrealloc: не удалось выделить %zd байт\n", size);
exit(EXIT_FAILURE);
}
return res;
}

typedef struct Array {
int *data;
int n;
} Array;

Array* newArray(int n);
Array* copyArray(const Array *array);
void destroyArray(Array *array);
void slice(Array* array, int first, int n);

int main(void) {
Array * array = newArray(5);
for (int i = 0; i < array->n; i++) {
scanf("%d", &(array->data[i]));
}

slice(array, 1, 3);
for (int i = 0; i < array->n; i++)
{
printf("%d ", array->data[i]);
}
printf("\n");
destroyArray(array);
system("pause");
return 0;
}

Array* newArray(int n) {
Array* new_array = (Array*)mymalloc(sizeof(Array));
new_array->n = n;
new_array->data = (int*)mymalloc(n * sizeof(int));
return new_array;
}

Array* copyArray(const Array *array) {
Array* new_array = (Array*)mymalloc(sizeof(Array));
new_array->n = array->n;
new_array->data = (int*)mymalloc(array->n * sizeof(int));
for (int i = 0; i < array->n; i++) {
new_array->data[i] = array->data[i];
}
return new_array;
}

void destroyArray(Array *array) {
free[] array->data;
free array;
}

void slice(Array* array, int first, int n) {
if ((first + n) > array->n) {
printf("Ошибка ввода");
exit(EXIT_FAILURE);
}

Array * temp = newArray(n);
for (int i = 0; i < n; i++) {
temp->data[i] = array->data[i + first];
}

myrealloc(array->data, n);
for (int i = 0; i < n; i++) {
array->data[i] = temp->data[i];
}
array->n = n;

destroyArray(temp);
}
Пример. Исходный массив:
1 2 3 4 5 6 7 8 9 0
Вызов:
slice(array, 3, 5);
Результат:
4 5 6 7 8

не работает... что не так? чует моё сердце, что что-то не так с free...

Что за тег [C]? Есть кнопка # для оформления кода
Модератор

Последний раз редактировалось Аватар; 19.06.2016 в 10:17.
numberonee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать процедуру поиска индекса n-го по счету нулевого элемента в одномерном массиве Davils Помощь студентам 0 17.02.2016 19:57
Двусвязный список: Как реализовать подсчет количества элементов в списке и поиск индекса элемента по его имени? Дана188 Помощь студентам 4 13.05.2015 16:45
Удаление из списка m элементов, начиная с элемента с номером n (Пролог) meme Помощь студентам 8 08.06.2014 19:19
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16