1

C ++の2D可変サイズ配列に慣れたかったので、小さなプログラムを作成しましたが、機能しません。コードは次のとおりです。

#include <iostream>

using namespace std;

int main(){
int a,i;
cin>>a; //the width of the array is variable
int **p2darray;
p2darray = new int*[2]; //the height is 2
for (i = 0; i < 2; i++){
    p2darray[i] = new int[a];
}
i=0;
while(i!=a){
    p2darray[0][i]=i; //filling some numbers in the array
    p2darray[1][i]=2*i;
    i++;
}
i=0;
while(i!=a){
    cout<<p2darray[0][i]<<endl;
    cout<<p2darray[1][i]<<endl;
    i++;
}
return 0;
}

では、なぜそれが機能しないのですか?

4

4 に答える 4

3

主な問題はp2darray[i][0]、2番目のディメンションをユーザーが入力したサイズに設定しているため、インデックスが逆方向になっていることですが、代わりに1番目のディメンションをその数値にインクリメントしています。これは通常、セグメンテーション違反を引き起こします。p2darray[0][i]4つのケースすべてに当てはまるはずです。iまた、印刷ループに入る前に0に戻らなかったため、印刷プロセス全体がスキップされます。

上記の修正を説明する実行中のプログラムについては、ここを参照してください

于 2012-07-29T15:53:43.460 に答える
2

リセットするのを忘れましたi

i=0;
while(i!=a){
    p2darray[i][0]=i; //filling some numbers in the array
    p2darray[i][1]=2*i;
    i++;
}
// Now i == a, so the next loop doesn't run
while(i!=a){
    cout<<p2darray[i][0]<<endl;
    cout<<p2darray[i][1]<<endl;
    i++;
}

i = 0;2つのループの間に挿入します。

また、インデックスの順序が間違っています。最初のインデックスは値0と1しか取得できません。それ以外の場合は、割り当てられた領域外のメモリにアクセスします。

i=0;
while(i!=a){
    p2darray[0][i]=i; //filling some numbers in the array
    p2darray[1][i]=2*i;
    i++;
}
i = 0;
while(i!=a){
    cout<<p2darray[0][i]<<endl;
    cout<<p2darray[1][i]<<endl;
    i++;
}

正しい。

于 2012-07-29T15:53:00.157 に答える
0

2次元配列を関数に配置してみませんか。

#include <iostream>

using namespace std;

int** CreateArray(int valuea, int valueb)
{
     int** array;
     array = new int *[valuea];
     for(int i =0;i< row;i++)
     {
         array[i] = new int [valueb];
     }
     return array;
}

次に、メモリを返すことを忘れてはなりません。

int main(){
int a;
int i = 0;

cin>>a;
int** array = CreateArray(a,i);

while(i!=a){
  array[i][0]=i;
  array[i][1]=2*i;
  i++;
}
i=0;
    while(i!=a){
      cout<<array[i][0]<<endl;
      cout<<array[i][1]<<endl;
      i++;
 }
return 0;
}
于 2012-07-29T16:13:59.297 に答える
0

C++の2D可変サイズ配列

 #include <bits/stdc++.h>
 using namespace std;

 int main(){

int row,col,i,j;
cin>>row;                    //no. of rows
string col_size;             //mapping index to no.of columns     

vector<vector<int> >Arr(row);

for(i=0; i<row ; i++){
  cin>>col;
  col_size.push_back(col);    // no. of columns at ith row 
  Arr[i]=vector<int>(col);
       for(j=0 ; j < col_size[i] ; j++)
             cin>>Arr[i][j];
}

                      //printing the 2D Array

for(i=0; i<row ; i++){
       for(j=0 ; j<col_size[i] ;j++){
              cout<<Arr[i][j]<<" ";
   }
    cout<<"\n";
   }
  return 0;
}
于 2019-06-17T07:58:01.230 に答える