powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите исправить ошибку!!!
9 сообщений из 9, страница 1 из 1
помогите исправить ошибку!!!
    #33645051
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попытался создать динам. массив, вот что из этого вышло, вернее не вышло :(
как вообче исправить этот код?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
int main()
{
int **array ,n;
cout<<"Razmernost massiva= ";
cin>>n;
array=(int**)malloc(n*sizeof(*array));
*array=(int*)malloc(n*sizeof(int));
cout<<"n="<<n<<endl;

for (int i= 0 ; i<n; i++)
{
   for (int j= 0 ; j<n; j++)
   {
      cin>>array[i][j];
      cout<<"i="<<i<<" j="<<j<<" "<<array[i][j]<<endl;
   }
}
...
}
дает ввести только [0][0], [0][1], [0][2]. и усё. а как с остальным быть???
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645080
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
int **array, n;
array = new int*[n];
for(int i= 0 ; i<n; i++) array[i] = new int[n];
этот вариант работает отлично, а почему первый не работает нефига не понятно. а по логике вроде как должон
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645116
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dik_kпопытался создать динам. массив, вот что из этого вышло, вернее не вышло :(
как вообче исправить этот код?
...

дает ввести только [0][0], [0][1], [0][2]. и усё. а как с остальным быть???

Так в первом фрагменте у тебя память выделяется только под первую строку массива. А остальные?

Сделай так же как во втором примере, будет работать:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
int main()
{
    int **array ,n;
    cout<<"Razmernost massiva= ";
    cin>>n;
    array=(int**)malloc(n*sizeof(*array));
    
    cout<<"n="<<n<<endl;

    for (int i= 0 ; i<n; i++)
    {
       array[i]=(int*)malloc(n*sizeof(int));
       for (int j= 0 ; j<n; j++)
       {
          cin>>array[i][j];
          cout<<"i="<<i<<" j="<<j<<" "<<array[i][j]<<endl;
       }
    }

    // не забудьте освободить ресурсы потом и все такое

    return  0 ;
}
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645130
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да-да, точно, спасибо.
есть ещё вопрос: мне нужен точно такой же массив (с этими же данными) с такой же размерностью. лучше создать другой объект через копирующий конструктор? (я про способ создания идентичного массива)
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645162
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
int main()
{
int *array[];
int n =  0 ;

cout<<"Type array size:";
cin>>n;
cout<<"n="<<n<<endl;

array= new int[ n ];

for (int i= 0 ; i<n; i++)
{
   cout<<"type " << i <<"-th array element:";
   cin>>array[i];
}

for (int i= 0 ; i<n; i++)
{
   cout<<"i="<<i<<array[i]<<endl;
}
}
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645167
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dik_kда-да, точно, спасибо.
есть ещё вопрос: мне нужен точно такой же массив (с этими же данными) с такой же размерностью. лучше создать другой объект через копирующий конструктор? (я про способ создания идентичного массива)

Ммм... боюсь тут имеет место некоторое недопонимание. Копирующий конструктор применяется для создания копии экземпляра объекта класса. А здесь обычный массив, к нему конструктор (обычный или копирования) не пришьешь...

Совсем лучше будет вместо int** использовать vector<vector<int> > >, тогда копирование это просто v1 = v2.
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645196
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если не через vector<vector<int> > >, а через int**, то как лучше скопировать?
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645280
dik_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще, векторами лучше пользоваться, чем напр. динам. массивами?
...
Рейтинг: 0 / 0
помогите исправить ошибку!!!
    #33645297
redskin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dik_kа если не через vector<vector<int> > >, а через int**, то как лучше скопировать?

А какая разница?
Как удобней, так и копировать.
Можно хоть поэлементно:

Код: plaintext
1.
2.
3.
4.
5.
6.
void mcpy(int **dst,  const int * const *src, int n)
{
    for(int i =  0 ; i < n; i++)
        for(int j =  0 ; j < n; j++)
            dst[i][j] = src[i][j];
}

или через memcpy:

Код: plaintext
1.
2.
3.
4.
5.
void mcpy(int **dst,  const int * const *src, int n)
{
    for(int i =  0 ; i < n; i++)
        memcpy(dst[i], (void*)(src[i]), n*sizeof(**dst));
}

В этих случаях память уже должна быть выделена перед вызовом функции. Если надо чтобы при создании копии и память выделялась, то что-нибудь вроде этого:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int** mcpy(const int * const *src, int n)
{
    int **dst = (int**)malloc(n*sizeof(int*));
    for(int i =  0 ; i < n; i++)
    {   
        dst[i] = (int*)malloc(n*sizeof(int));
        memcpy(dst[i], (void*)(src[i]), n*sizeof(int));
    }
    return dst;
}

dik_kа вообще, векторами лучше пользоваться, чем напр. динам. массивами?

Конечно лучше. Не надо возиться с , malloc/free или new/delete. От ошибок типа

Код: plaintext
1.
2.
    vector<int> v;
    v[ 100 ] =  1 ;

это все равно не спасет, но Segmentation fault всяко лучше чем утечки памяти :)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите исправить ошибку!!!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]