Форум программистов, компьютерный форум CyberForum.ru

Увеличить размерность массива - C++

Восстановить пароль Регистрация
 
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
11.04.2014, 23:27     Увеличить размерность массива #1
Короче такая проблема, есть массив с данными, нужно увеличить его размерность, вроде написал всё правильно, но выскакивает ошибка Debag error и тд, вот код, подскажите что я делаю нетак

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
using namespace std;
 
int increase_int_array(int *get_array,int array_len) {
 
    if(array_len = 1) {
//если длина массива= 1 значи он до этого был пустой и перезаписыать данные ненужно
        delete[]get_array;
        get_array = new int[array_len];
    }else{
 
    int *time_array = new int[array_len-1];
//создаем временный указатель на массив
    for (int i = 0; i < array_len-1; i++)
    {
        *(time_array+i) = *(get_array+i);
    }
//копируем в него данные
    delete[]get_array;
//удаляем массив
int *get_array = new int[array_len];
    for (int i = 0; i < array_len-1; i++)
    {
        *(get_array+i) = *(time_array+i);
    }
 
//записываем всё обратно
 
    }
    return 0;
}
 
void main()  {
    
 
 
    int array_len = 0;
    int *good_array = new int[array_len];
//создаем указатель на массив
 
 
    for (int i = 0; i < 10; i++)
    {
        
            array_len++;
// увеличиваем размер
            increase_int_array(good_array,array_len);
//перезаписываем массив с новым размером
            *(good_array+i)=i;
 
        
    }
 
 
    system("pause");
 
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.04.2014, 23:39     Увеличить размерность массива #2
C++
1
int increase_int_array(int *& get_array,int array_len)
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
12.04.2014, 00:39  [ТС]     Увеличить размерность массива #3
серовно ошибка
Миниатюры
Увеличить размерность массива  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.04.2014, 01:02     Увеличить размерность массива #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от mh-coder Посмотреть сообщение
серовно ошибка
Отладчиком пользоваться умеете? Найдите, в каком месте кода ошибка.

Добавлено через 2 минуты
C++
1
if(array_len = 1)
Это не сравнение, а присваивание.

Добавлено через 8 минут
Цитата Сообщение от mh-coder Посмотреть сообщение
int *get_array = new int[array_len];
И не нужно, в функции, новый указатель объявлять. Просто:
C++
1
get_array = new int[array_len];
Добавлено через 3 минуты
Память под time_array нужно освобождать (в конце функции).

Добавлено через 5 минут
Но лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int increase_int_array(int *&get_array,int array_len)
{
    if(array_len == 1) 
    {
//если длина массива= 1 значи он до этого был пустой и перезаписыать данные ненужно
        delete[]get_array;
        get_array = new int[array_len];
    }
    else
    {
 
    int *time_array = new int[array_len];
//создаем временный указатель на массив
    
    for (int i = 0; i < array_len-1; i++)
    {
        *(time_array+i) = *(get_array+i);
    }
//копируем в него данные
    delete [] get_array;
//удаляем старый массив
    get_array = time_array;
// адрес нового массива присваиваем get_array
    
    }
    return 0;
}
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
12.04.2014, 16:33  [ТС]     Увеличить размерность массива #5
мм, точно спасибо, а как понимать эту запись int *& get_array ? а именно интересует *&, зачем тут &
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.04.2014, 16:43     Увеличить размерность массива #6
Цитата Сообщение от mh-coder Посмотреть сообщение
именно интересует *&, зачем тут &
Ссылка на указатель. Если без неё, то в функцию передаётся копия указателя (передача по значению). В функции значения указателя меняется (присваивается адрес нового массива), если передана копия, то такое изменение никак не коснётся оригинала (который в main()).
Yandex
Объявления
12.04.2014, 16:43     Увеличить размерность массива
Ответ Создать тему
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru