2015-01-23 2 views
0

Как указано в заголовке, я хочу объединить два массива в один более массивный массив. например:Объединение двух массивов 3 на 3 в один массив в C++

array1= 1 2 3 
     4 5 6 
     7 8 9 
array1= 10 20 30 
     40 50 60 
     70 80 90 
array3= 1 2 3 10 20 30 
     4 5 6 40 50 60 
     7 8 9 70 80 90 

Итак, я написал этот код:

#include <iostream> 

using namespace std; 

int main() 
{ 
    int array1[3][3],array2[3][3],array3[3][6]; 
    int i,j; 

    //Matrix 1 input 
    cout<<"Enter matrix 1\n"; 
    for (i=0;i<3;i++) 
    { 
     for (j=0;j<3;j++) 
     { 
      cin>>array1[i][j]; 
      array3[i][j]=array1[i][j]; //Assigning array1 values to array3 
     } 
    } 

    //array2 input 
    cout<<"Enter matrix 2\n"; 
    for (i=0;i<3;i++) 
    { 
     for (j=3;j<6;j++) 
     { 
      cin>>array2[i][j]; 
      array3[i][j]=array2[i][j]; //Assigning array2 values to array3 
     } 
    } 

    //array3 output 
    cout<<"New matrix is\n"; 
    for (i=0;i<3;i++) 
    { 
     for (j=0;j<6;j++) 
     { 
      cout<<array3[i][j]<<"\t"; 
     } 
    cout<<"\n"; 
    } 
} 

Но когда я исполню его, я закончил с последней строкой массив2 является (2,3), (2,4) и (2,5) элементов (что является правильным), но также являются (0,1), (0,2) и (0,3) элементами (которые должны быть [1 2 3]).

array3= 70 80 90 10 20 30 
     4 5 6 40 50 60 
     7 8 9 70 80 90 

Итак, что здесь происходит?

EDIT: я сделал следующее:

for (i=0;i<3;i++) 
{ 
    for (j=0;j<3;j++) 
    { 
     cin>>array2[i][j]; 
     array3[i][j+3]=array2[i][j]; //Assigning array2 values to array3 and adding 3 to j 
    } 

И это пошло нормально. Является ли метод «профессиональным»? }

+0

Вы пробовали отладки кода? – Kindread

+0

В вашей части 'array2 input'' '' '[3,6)', а 'array2' -' array2 [3] [3] ' – justmscs

ответ

0

array2 - массив 3x3, и вы используете j-индексы между 3 и 6: вы получаете доступ за пределами своей матрицы в любом месте в памяти.

Вы должны вместо этого написать (например):

//array2 input 
cout<<"Enter matrix 2\n"; 
for (i=0;i<3;i++) 
{ 
    for (j=0;j<3;j++) 
    { 
     cin>>array2[i][j]; // j is correct for array2 
     array3[i][j+3]=array2[i][j]; //Assigning array2 values to array3 
    } 
} 
1

Это неопределенное поведение:

for (i=0;i<3;i++) 
    for (j=3;j<6;j++) 
     array3[i][j]=array2[i][j]; 

array2 является 3х3, но вы индексировать в него, начиная с [0] [3], которая является ошибкой. Вы можете получить проверку выполнения такого рода, если вы использовали C++ 11 std::array и его метод .at() вместо исходных массивов C.

+1

GCC' -Warray-bounds' поймал это при компиляции. – user657267

+1

@ user657267: Хорошая точка, хотя в моей системе она обнаруживает это только при компиляции с '-O2' или выше. Простой 'g ++ -Wall -O2' делает трюк. –

Смежные вопросы