Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // функция Obmen должна принимать на вход указатель на массив, и два номера столбцов, значения в которых необходимо заменить void Obmen(int** arr, int col1, int col2)
- void Obmen(int** arr, int lines, int& cols) {
- for (int i = 0; i < lines; i++) {
- int* temp = new int[cols]; // этим действием вы создаете новый массив, но в этой задаче это не требуется
- for (int j = 0; j < cols; j++) { // и этот цикл не нужен
- if (j == 0) {
- temp[j] = arr[i][0];
- arr[i][0] = arr[i][2];
- arr[i][2] = temp[j];
- }
- }
- // необходимо просто запомнить значение столбца col1 текущей строки
- // записать в col1 значение из col2 а в col2 значение temp
- // то есть нужна просто temp типа int а циклы и новый массив не нужен
- }
- delete[]arr; // а этим действием вы вообще удаляете весь исходный массив (точнее наполовину удаляете, вызывая утечку памяти)
- }
- int main() {
- int a = 3;
- int b = 4;
- int** pArr = new int* [a];
- for (int i = 0; i < a; i++) {
- pArr[i] = new int[b];
- }
- for (int i = 0; i < a; i++) {
- for (int j = 0; j < b; j++) {
- pArr[i][j] = rand() % 20;
- cout << setw(4) << pArr[i][j];
- }
- cout << endl;
- }
- cout << endl;
- Obmen(pArr, a, b); // в функцию необходимо передать номера конкретных столбцов, например Obmen(pArr, 0, 1)
- for (int i = 0; i < a; i++) {
- for (int j = 0; j < b; j++) {
- cout << setw(4) << pArr[i][j]; // из-за удаления исходного массива в строке 20, на этом месте программа "падает"
- }
- }
- delete[] pArr; // утечка данных - удален только головной массив, а вложенные не удалены (цикл)
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment