35657

Untitled

Apr 29th, 2023
916
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1.  
  2.  
  3.  
  4. // функция Obmen должна принимать на вход указатель на массив, и два номера столбцов, значения в которых необходимо заменить void Obmen(int** arr, int col1, int col2)
  5. void Obmen(int** arr, int lines, int& cols) {
  6.     for (int i = 0; i < lines; i++) {      
  7.         int* temp = new  int[cols]; // этим действием вы создаете новый массив, но в этой задаче это не требуется
  8.         for (int j = 0; j < cols; j++) { // и этот цикл не нужен
  9.             if (j == 0) {
  10.                 temp[j] = arr[i][0];  
  11.                 arr[i][0] = arr[i][2];
  12.                 arr[i][2] = temp[j];  
  13.  
  14.             }                          
  15.         }
  16.         // необходимо просто запомнить значение столбца col1 текущей строки
  17.         // записать в col1 значение из col2 а в col2 значение temp
  18.         // то есть нужна просто temp типа int а циклы и новый массив не нужен
  19.     }
  20.     delete[]arr; // а этим действием вы вообще удаляете весь исходный массив (точнее наполовину удаляете, вызывая утечку памяти)
  21. }
  22.  
  23. int main() {
  24.     int a = 3;
  25.     int b = 4;
  26.     int** pArr = new  int* [a];
  27.     for (int i = 0; i < a; i++) {
  28.         pArr[i] = new int[b];
  29.     }
  30.     for (int i = 0; i < a; i++) {
  31.         for (int j = 0; j < b; j++) {
  32.             pArr[i][j] = rand() % 20;
  33.             cout << setw(4) << pArr[i][j];
  34.         }
  35.         cout << endl;
  36.     }
  37.     cout << endl;
  38.  
  39.     Obmen(pArr, a, b); // в функцию необходимо передать номера конкретных столбцов, например Obmen(pArr, 0, 1)
  40.     for (int i = 0; i < a; i++) {
  41.         for (int j = 0; j < b; j++) {
  42.             cout << setw(4) << pArr[i][j]; // из-за удаления исходного массива в строке 20, на этом месте программа "падает"
  43.         }
  44.     }
  45.     delete[] pArr; // утечка данных - удален только головной массив, а вложенные не удалены (цикл)
  46.     return 0;
  47.  
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment