Форум программистов, компьютерный форум CyberForum.ru

Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free - C++

Восстановить пароль Регистрация
 
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
04.05.2014, 02:47     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    char **line = reinterpret_cast<char**>(malloc(4*sizeof(char)));
    for (int i = 0; i < 4; i++)
    { 
        line[i] = reinterpret_cast<char*>(malloc(4*sizeof(char)));
        cin >> line[i];
    }
    for (int i = 0; i < 4; i++)
    {
        cout<< line[i]<<endl;
        free(line[i]);
    }
    free(line);
    _getch();
Программа отрабатывает, и в конце выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint"
Если убрать в конце free(line), то работает нормально.
Почему не нужно делать free(line)? А в коде ниже (двумерный массив) нужно free(line)?
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
int n;
    cout << "Введите количество строк: ";
    cin >> n;
    double **line;
    line = reinterpret_cast<double**>(calloc(n, sizeof(double)));
    int* m;
    m = reinterpret_cast<int*>(malloc(sizeof(int)*n));
    for (int i = 0; i < n; i++)
    {
        cout << "Введите длину строки m[" << i << "]=";
        cin >> m[i];
        line[i] = reinterpret_cast<double*>(calloc(m[i],sizeof(double)));
        for (int j = 0; j < m[i]; j++)
        { 
            cout << "line[" << i << "][" << j << "]=";
            cin >> line[i][j];
        }
    }
    cout << "\nРеузльтат обработки: ";
    for (int i = n - 1; i >= 0; i--)
    {
        cout << endl << "Строка " << i << ", элементов "<<m[i]<<": \n";
        for (int j = 0; j < m[i]; j++)
            cout << '\t' << line[i][j];
        free(line[i]);
    }
    free(line);
    free(m);
И еще, кто-нибудь может сказать, почему условие не работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
    char **line = reinterpret_cast<char**>(malloc(4*sizeof(char)));
    for (int i = 0; i < 4; i++)
    { 
        line[i] = reinterpret_cast<char*>(malloc(4*sizeof(char)));
        cin >> line[i];
        if (sizeof(line[i])>4) line[i] = "002";
    }
    for (int i = 0; i < 4; i++)
    {
        cout<< line[i]<<endl;
        free(line[i]);
    }
Ввожу больше 3 символов и ошибка при выводе.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 02:47     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free
Посмотрите здесь:

C++ HoughTransformV4.exe has triggered a breakpoint
C++ Что делать с ошибкой: C2440: инициализация: невозможно преобразовать "int **" в "int *"
Компилятор выдает ошибку app.exe has triggered a breakpoint C++
C++ Необработанное исключение в "0x776315de" в "c++1.exe": 0xC0000005: Нарушение прав доступа при записи "0x40e000
C++ Необработанное исключение в "0x104b2288" в "Matrix.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcd
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RamonN
 Аватар для RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 136
04.05.2014, 03:28     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #2
попробуйте вместо malloc использовать calloc
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
04.05.2014, 03:36  [ТС]     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #3
RamonN, то же самое.
И вот что пишет в окошке Locals:
C++
1
pUserData   0x00a0ecd4 {ConsoleApplication58.exe!`string'} "002"    const void *
Jewbacabra
1793 / 1508 / 541
Регистрация: 24.04.2014
Сообщений: 4,241
04.05.2014, 10:55     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #4
char **line = reinterpret_cast<char**>(malloc(4*sizeof(char*)));

Добавлено через 33 минуты
И еще
C++
1
line[i] = "002";
Во первых "002" строковый литерал -константный присваивается не константному выражению.
Во вторых таким образом теряется память выделенная по line[i]
C++
1
strcpy(line[i], "002"); // еще желательно проверить что выделено достаточно памяти
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
04.05.2014, 11:08     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #5
Цитата Сообщение от Gygocopter Посмотреть сообщение
И еще, кто-нибудь может сказать, почему условие не работает?
потому что
Цитата Сообщение от Gygocopter Посмотреть сообщение
sizeof(line[i])>4
здесь берется не размер строки, а размер указателя,равный 4
на 64 битной машине где указатель равен 8 байтам, будет всегда срабатывать

для определения длинны строки strlen

Добавлено через 1 минуту
Цитата Сообщение от Jewbacabra Посмотреть сообщение
char **line = reinterpret_cast<char**>(malloc(4*sizeof(char*)));
а на 4 зачем тогда умножать?

Добавлено через 1 минуту
Цитата Сообщение от Gygocopter Посмотреть сообщение
line[i] = reinterpret_cast<char*>(malloc(4*sizeof(char)));
* * * * cin >> line[i];
как думаешь сколько памяти здесь выделяется?
Jewbacabra
1793 / 1508 / 541
Регистрация: 24.04.2014
Сообщений: 4,241
04.05.2014, 11:41     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #6
Цитата Сообщение от ValeryS Посмотреть сообщение
а на 4 зачем тогда умножать?
Как я понял TC нужно выделить память для массива из 4 строк, сначала массив из 4 char*, потом на каждый еще 4 char
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 12:07     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free
Еще ссылки по теме:

C++ .exe has triggered a breakpoint (умножение матриц)
C++ Не правильное значение при использовании {setlocale (LC_ALL, "Russian");
Компилятор выдает ошибки (Решение 1.exe has triggered a breakpoint) C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
04.05.2014, 12:07     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free #7
Jewbacabra,
все правильно
Это я сглупил
подумал что sizeof(char)*4= sizeof(char*)
Yandex
Объявления
04.05.2014, 12:07     Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free
Ответ Создать тему
Опции темы

Текущее время: 03:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru