Форум программистов, компьютерный форум, киберфорум С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 03.02.2020
Сообщений: 25

Ошибка при удалении вызове Delete

09.02.2021, 06:58. Показов 1111. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья, всем привет.
Подскажите в чём может быть ошибка при удалении данных из динамического массива(Фото во вложении).
Само задание звучит так: Напишите программу, которая создаёт безопасный двумерный массив (2х3) целых.

Сама ошибка в строчке
C++ Скопировано
1
  delete[]arr[i];
Заранее спасибо)

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
using namespace std;
 
class samp { 
    int** arr, stroki, kolonki;
public:
    samp(int n,int m)                       // Передаётся размерность 2х3
    {
        cout << "Making arr\n";
        kolonki = n;                       // 2 столбца
        stroki = m;                        // 3 строки
        arr = new int*[stroki];            
        for (int i = 0; i < stroki; i++)    // Инициализация колонки
        {
            for (int j = 0; j < kolonki; j++)       //А в ней инициализация всей строки
            {
                arr[i] = new int[j];                //Создание столбцов в строке
            }
        }
    }
    ~samp() 
    { 
        cout << "Erase arr" << sizeof(arr) << "\n"; 
        for (int i = 0; i < stroki; i++)
        {
            delete[]arr[i];
        }
        delete[]arr;
        cout << "Arr Erised\n";
    }
    int& put_k(int mas0,int mas1);
    void show();
};
 
int &samp::put_k(int mas0, int mas1)
{
    cout << "Checking arr...\n";
    if ((mas0<0 || mas0>stroki) && (mas1<0 || mas1>kolonki))
    {
        cout << "Wrong index!! Lox\n";
        exit(1);
    }
    cout << "Check arr complete!\n";
    return arr[mas0][mas1];
}
 
 
 
void samp::show()
{
    for (int i = 0; i < stroki; i++)
    {
        for (int j = 0; j < kolonki; j++)
        {
            cout << arr[i][j] << "\t";
        }
        cout << "\n";
    }
}
 
 
int main()
{
    samp ob(2,3);
    ob.put_k(1,1) = 5;
    ob.put_k(1, 0) = 10;
    ob.put_k(0, 0) = 888;
    ob.put_k(0, 1) = 1;
    ob.put_k(2, 1) = 21;
    ob.put_k(2, 0) = 20;
    cout << sizeof(ob) << "\n";
    ob.show();
    return 0;
}
Миниатюры
Ошибка при удалении вызове Delete  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.02.2021, 06:58
Ответы с готовыми решениями:

Ошибка при вызове деструктора (при вызове delete в деструкторе)
Не могу найти ошибку, при вызове деструктора от класса, который был создан при помощи конструктора с параметром const String &amp;,...

Ошибка при удалении массива с помощью delete
Изучаю C++ и у меня задание разбить текст неопределенной длинны на массив строк. Нацарапал класс типа string ниже выложу. В него задача...

Ошибка при вызове delete
Вот код // ConsoleApplication1.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include...

2
Модератор
Эксперт С++
 Аватар для zss
13739 / 10934 / 6484
Регистрация: 18.12.2011
Сообщений: 29,181
09.02.2021, 07:43
Лучший ответ Сообщение было отмечено GaniBLLO как решение

Решение

Вы не понимаете принцип создания массива
C++ Скопировано
1
2
3
4
5
6
7
      arr = new int*[stroki];  //выделяем память для того, чтобы можно было записать в нее адреса строк
// количество строк равно stroki
      for (int i = 0; i < stroki; i++)  
      {
                 arr[i] = new int[kolonki]; //для каждой строки выделяем память на kolonki элементов
// адреса выделенной памяти записываем в ранее созданный массив адресов
      }
Конструктор целиком
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    samp(int n,int m)                      
    {
        cout << "Making arr\n";
        kolonki = n;                     
        stroki = m;                  
       arr = new int*[stroki]; 
       for (int i = 0; i < stroki; i++)  
       {
             arr[i] = new int[kolonki]; 
       }
       for (int i = 0; i < stroki; i++)   
            for (int j = 0; j < kolonki; j++) 
                arr[i][j] = 0;            // Инициализация массива
    }
1
0 / 0 / 0
Регистрация: 03.02.2020
Сообщений: 25
09.02.2021, 12:31  [ТС]
Большое спасибо.Ещё не до конца разобрался с этими массивами(особенно с динамической памятью и указателями).

P.S
Я знаю, что есть ещё контейнеры типа Vector<>.
И вот вопрос. Что лучше использовать массивы или векторы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2021, 12:31
Помогаю со студенческими работами здесь

Ошибка с delete при удалении памяти из-под строки
strngbad.h // strngbad.h -- flawed string class definition #include &lt;iostream&gt; #ifndef STRNGBAD_H_ #define STRNGBAD_H_ class...

_block_type_is_valid при вызове delete()
код для генерации случайного графа #define m 3 //Число входящих и исходящих ребер. #define N 200 //Минимально требуемое число...

При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Функция strtok влияет на массив second, после чего его невозможно удалить, не могу понять чего. first удаляет без проблем. FILE*...

При вызове деструктора в строке delete[] data выбрасывается исключение
вот как раз вопрос по этой теме. программа отрабатывает все команды и в конце при вызове деструктора в строке delete data выбрасывает...

Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс TMyClass; создаются объектыp1=new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
Сложность Колмогорова: Приёмы упрощения кода
ArchitectMsa 20.03.2025
Наверное, каждый программист хотя бы раз сталкивался с кодом, который напоминает запутанный лабиринт — чем дальше в него погружаешься, тем сложнее найти выход. И когда мы говорим о сложности кода, мы. . .
PostgreSQL в Kubernetes: Подготовка кластера и настройка
Mr. Docker 20.03.2025
Когда доходит до контейнеризации баз данных и особенно таких требовательных к ресурсам системах как PostgreSQL, многие команды до сих пор колеблются, прежде чем перенести их в контейнерную. . .
C++26: Индексирование пакетов и метапрограммиро­вание
bytestream 20.03.2025
Эволюция C++ продолжается стремительными темпами – каждый новый стандарт приносит функциональность, о которой мы мечтали годами. Звучит слишком громко? Если вы когда-либо боролись с вариадическими. . .
Состояние гонки в C#: подводные камни многопоточного программировани­я
UnmanagedCoder 20.03.2025
Что такое состояние гонки? Это ситуация, когда результат программы непредсказуемо меняется в зависимости от порядка выполнения потоков. Проще говоря, два или более потока пытаются одновременно. . .
Next.js для разработки React: преимущества серверного рендеринга
Reangularity 20.03.2025
Next. js решает классическую проблему React-приложений: медленную первоначальную загрузку и плохую индексацию поисковиками. Вместо того чтобы заставлять браузер пользователя выполнять всю работу по. . .
JUnit или TestNG: Выбираем Java-фреймворк для тестирования
Javaican 20.03.2025
История тестовых фреймворков в Java началась в конце 90-х, когда Кент Бек и Эрих Гамма разработали JUnit - инструмент, который перевернул представление разработчиков о модульном тестировании. JUnit. . .
Разбиваем монолит на два микросервиса и реализуем CI/CD
ArchitectMsa 20.03.2025
Когда команда растет, а функциональность монолита расширяется, поддерживать и развивать такую систему становится все труднее. Разработчики начинают тратить много времени на разбор сложных. . .
Python и PDF: Создание и редактирование файлов
py-thonny 20.03.2025
Работа с PDF-документами – одна из популярных задач в современной разработке. Python предлагает несколько инструментов для создания, чтения и редактирования PDF-файлов, среди которых особенно. . .
Корутины в Unity и производительно­сть WaitForSeconds
GameUnited 20.03.2025
Разработчики игр на Unity часто сталкиваются с вопросом: как выполнять действия через определённые промежутки времени, не блокируя основной поток игры? Тут как раз и приходят на помощь корутины —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер