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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2010, 21:18   #1
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
Сообщение Динамические массивы с++

Задание:
1)Добавить К столбцов в конец матрицы
2)Уничтожить последнюю строку матрицы

Код:
#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;


main()
{
int n=3,m=3;      

int **array;
array = new int* [n]; 
for( int i=0; i < n; i++ )
array[i] = new int[m]; 

for (int i=0;i<n;i++)
    for (int j=0;j<m;j++)
        array[i][j]=rand()%10;
        
for (int i=0;i<n;i++)
{
    for (int j=0;j<m;j++)
        cout<<array[i][j]<<"  ";
    cout<<endl<<endl;    
}
cout<<"Vvedit N ctoBnciB:";
int a=0;
cin>>a;
cout<<endl;
for (int i=0;i<n;i++)
    for (int j=m;j<m+a;j++)
        array[i][j]=rand()%10;
m+=a;        
for (int i=0;i<n;i++)
{
    for (int j=0;j<m;j++)
        cout<<array[i][j]<<"  ";
    cout<<endl<<endl;    
} 
cout<<endl;

int **array1;
array1 = new int* [n-1]; 
for( int i=0; i < n-1; i++ )
array1[i] = new int[m];



for (int i=0;i<n-1;i++)
    for (int j=0;j<m;j++)
        array1[i][j]=array[i][j];
        
for (int i=0;i<n-1;i++)
{
    for (int j=0;j<m;j++)
        cout<<array1[i][j]<<"  ";
    cout<<endl<<endl;    
}     

delete[] array1; 
delete[] array;         
getch();
}
Впринципе програма работает но через раз
Выбивает ошибку типа "Инструкция по адресу ... обратилась по адресу ... память неможет быть read"
выбивает ошибку на етапе создания второго динамического масива.
Может быть ктото знает в чём проблема ?
maxsept вне форума Ответить с цитированием
Старый 25.10.2010, 22:21   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Ну так все ясно.
Создаешь двумерный массив:
Код:
array = new int* [n]; 
for( int i=0; i < n; i++ )
array[i] = new int[m];
с размерностью 3 на 3, а потом бац:
Код:
for (int i=0;i<n;i++)
    for (int j=m;j<m+a;j++)
        array[i][j]=rand()%10;
Неизвестно к какому элементу хочешь обратиться. Без пересоздания массива решить проблему не удастся. Нужно массив array куда то переписать, например в temp массив, а потом снова создать с новым размером array и в него переписать temp. Как то так .
А забыл еще одно. И память очищать как-то так нужно:
Код:
for (int i=0;i<n;i++)
delete[] array[i];

delete[] array;

Последний раз редактировалось profi; 25.10.2010 в 22:32.
profi вне форума Ответить с цитированием
Старый 27.10.2010, 20:16   #3
maxsept
Пользователь
 
Регистрация: 14.01.2010
Сообщений: 14
По умолчанию

Спасиб!
Интересно получаеться)) почему же она иногда срабатывает )?
maxsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамические массивы - C++ ? denes Общие вопросы C/C++ 31 18.06.2010 10:57
Динамические массивы volchik1991 Общие вопросы C/C++ 1 14.06.2010 01:57
Динамические массивы и массивы варианты N@stya Помощь студентам 0 11.06.2010 21:09
Динамические массивы KotKot Помощь студентам 6 13.05.2010 15:07
динамические массивы в Си aka_faith Помощь студентам 1 24.05.2009 00:56