Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
#1

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

04.05.2014, 02:47. Просмотров 703. Ответов 6
Метки нет (Все метки)

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 символов и ошибка при выводе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 02:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выскакивает окно с ошибкой "ConsoleApplication.exe has triggered a breakpoint" при использовании free (C++):

Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"? - C++
class test { public: void a() { std::cout &lt;&lt; &quot;test::a&quot; &lt;&lt; std::endl; } }; class test2 : public test { public: ...

Вылетает ошибка ".exe has triggered a breakpoint" Не понимаю, что не так - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int pSourceData = 10; int nSourceDataLen =...

Ошибка "GoldMatrix.exe has triggered a breakpoint" - C++
Все, здравствуйте. Учусь программировать на с++. У меня возникают ошибки в конце выполнения пр-мы. Подскажите в чем дело и что они значат?...

Не получается разобраться с ошибкой: app.exe has triggered a breakpoint - C++
Задание: Считать информацию с одного файла и вывести в другой. Для 4 структур сделал 4 указателя для файлов. Не могу найти, почему...

Stalin.exe has triggered a breakpoint - C++
Здравствуйте! У меня возникла проблема, по которой я не могу найти решения в интернете. Собственно, после введения любой строки в...

Ошибка .exe has triggered a breakpoint - C++
вылетает, когда делаю delete, если delete стоит перед strcpy, то всё норм #include&lt;iostream&gt; void Perevod(char*,int...

6
RamonN
32 / 32 / 11
Регистрация: 13.07.2011
Сообщений: 138
04.05.2014, 03:28 #2
попробуйте вместо malloc использовать calloc
0
Gygocopter
10 / 10 / 5
Регистрация: 05.02.2014
Сообщений: 124
04.05.2014, 03:36  [ТС] #3
RamonN, то же самое.
И вот что пишет в окошке Locals:
C++
1
pUserData   0x00a0ecd4 {ConsoleApplication58.exe!`string'} "002"    const void *
0
Jewbacabra
Эксперт PHP
2696 / 2284 / 849
Регистрация: 24.04.2014
Сообщений: 6,850
04.05.2014, 10:55 #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"); // еще желательно проверить что выделено достаточно памяти
1
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,231
04.05.2014, 11:08 #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];
как думаешь сколько памяти здесь выделяется?
1
Jewbacabra
Эксперт PHP
2696 / 2284 / 849
Регистрация: 24.04.2014
Сообщений: 6,850
04.05.2014, 11:41 #6
Цитата Сообщение от ValeryS Посмотреть сообщение
а на 4 зачем тогда умножать?
Как я понял TC нужно выделить память для массива из 4 строк, сначала массив из 4 char*, потом на каждый еще 4 char
1
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,231
04.05.2014, 12:07 #7
Jewbacabra,
все правильно
Это я сглупил
подумал что sizeof(char)*4= sizeof(char*)
0
04.05.2014, 12:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2014, 12:07
Привет! Вот еще темы с ответами:

HoughTransformV4.exe has triggered a breakpoint - C++
Помогите=) стоит только попытаться применить любую операцию округления выдает такое сообщение: HoughTransformV4.exe has triggered a...

Test.exe has triggered a breakpoint ошибка - C++
Ошибка выполнения программы. Вроде ошибка при освобождении free(massZ). #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

.exe has triggered a breakpoint (умножение матриц) - C++
Класс матриц. Выдает такую ошибку при попытке вызвать функцию умножения: CMatrix operator*(CMatrix &amp;leftMatrix, CMatrix &amp;rightMatrix) {...

Компилятор выдает ошибку app.exe has triggered a breakpoint - C++
Парни C++ только начал изучать как пол года назад. Ссори если не правильно высказываюсь. Делаю задачку. Не могу врубиться почему...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.