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

Динамический массив - C++

Восстановить пароль Регистрация
 
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
28.11.2012, 00:27     Динамический массив #1
Здравствуйте, друзья!
Застрял на освобождении памяти.
Вот код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <conio.h>
using namespace std;
 
struct test{
    int a;
};
 
void main()
{
    int Size=3;
 
    test *array;
    array=new test[Size];
 
    int i=0;
    while(i!=10)
    {
        cin>>array[i++].a;
        if(i>3)
        {
            test *array_temp;
            array_temp=new test[i];
 
            for(int j=0; j<i-1; ++j)
                array_temp[j]=array[j];
    //работает до сих пор....
            delete [] array; 
 
            array=new test[i];
    
            for(int j=0; j<i; ++j)
                array[j].a=array_temp[j].a;
            
            delete [] array_temp;
        }
 
        for(int j=0; j<i; ++j)
            cout << ' ' << array[j].a;
 
        cout<<endl;
    }
 
    getch();
}
Подскажите, пожалуйста, где я допускаю ошибку???
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2012, 00:27     Динамический массив
Посмотрите здесь:

Можно ли в классе создавать массив переменной длинны. Например динамический массив? C++
Массив: передать динамический массив в функцию и записать в каждый элемент строку из файла C++
динамический массив (Целое число разложить на массив простых множителей) C++
C++ Динамический массив строк (считать с файла строки и поместить их в динамический массив строк)
Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
28.11.2012, 00:56     Динамический массив #2
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <conio.h>
using namespace std;
 
struct test{
    int a;
};
 
void main()
{
    int Size=3;
 
    test *array;
    array=new test[Size];
 
    int i=0;
    while(i!=10)
    {
        cin>>array[i++].a;
        if(i>=3)
        {
            test *array_temp;
            array_temp=new test[i+1];
 
            for(int j=0; j<i; ++j)
                array_temp[j]=array[j];
    //работает до сих пор....
            delete [] array; 
 
            array=new test[i+1];
    
            for(int j=0; j<i; ++j)
                array[j].a=array_temp[j].a;
            
            delete [] array_temp;
        }
 
        for(int j=0; j<i; ++j)
            cout << ' ' << array[j].a;
 
        cout<<endl;
    }
 
    getch();
}
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
28.11.2012, 01:07  [ТС]     Динамический массив #3
Croessmah, спасибо огромное!
dimon22-99
0 / 0 / 0
Регистрация: 29.05.2012
Сообщений: 11
28.11.2012, 01:29     Динамический массив #4
Мне кажется, что на первом витке цикла while array удачно освобождается, а на втором витке освобождается та же память, которая уже итак освобождена.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,900
Записей в блоге: 2
Завершенные тесты: 1
28.11.2012, 01:31     Динамический массив #5
Цитата Сообщение от dimon22-99 Посмотреть сообщение
Мне кажется, что на первом витке цикла while array удачно освобождается, а на втором витке освобождается та же память, которая уже итак освобождена.
Чуть далее delete память снова выделяется. И ошибка была в выходе за пределы массива.
OdessaNA
 Аватар для OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 240
29.11.2012, 20:36  [ТС]     Динамический массив #6
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
28
29
30
#include <iostream>
#include <conio.h>
using namespace std;
struct test{
    int a;
};
void main (){
 
    int Size=5;
    test *array=new test [Size];
    int i=0;
    while(i!=10)
    {
        cin >> array[i++].a;
        if(i>=Size)
        {
            test *array_test=new test[i+1];
            for(int j=0; j<i; ++j)
                array_test[j]=array[j];
            delete [] array;
            array = array_test;
        }
        for(int j=0; j<i; ++j)
            cout<< '\t' << array[j].a << ' ';
        cout <<  endl;
    }
    delete [] array;
 
    getch();
}
Yandex
Объявления
29.11.2012, 20:36     Динамический массив
Ответ Создать тему
Опции темы

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