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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
#1

Debug Assertion Failed - C++

11.06.2014, 02:39. Просмотров 1998. Ответов 26
Метки нет (Все метки)

Привет всем. Написал такую программу.
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
#include <stdio.h>
 
int n, m;
int i, q, d;
 
void merge(int a[], int b[], int c[], int n, int m){
    int A(0), B(0);
 
    while((A + B) < (n + m))
    {
        if( (B >= m) || ( (A < n) && (a[A] >= b[B]) ) )
        {
            c[A + B] = a[A];
            ++A;
        } else
        {
            c[A + B] = b[B];
            ++B;
        }
    }
}
int main()
{
    FILE *f;
    FILE *e;
    f = fopen("merge.dat", "r");
 
    fscanf(f,"%d", &n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        fscanf(f,"%d", &a[i]);
    fscanf(f,"%d", &m);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        fscanf(f,"%d", &b[q]);
    fclose(f);
 
    e = fopen("merge.sol", "w");
    int *c = new int[n + m];
 
    merge(a, b, c, n, m);
 
    for(d = 0; d < (n + m);d++)
        fprintf(e,"%d\n", c[d]);
    fclose(e);
 
    delete[]a;
    delete[]b;
    delete[]c;
 
    return 0;
}
Выводит ошибку "Debug Assertion Failed. Line 52". Скажите, в чем проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2014, 02:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Debug Assertion Failed (C++):

Debug Assertion Failed! - C++
Доброго времени суток. Имеется код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { setlocale(LC_ALL,...

Debug assertion failed - C++
Проблема при попытке релиза, дебажится при этом нормально, объясните мне, что может быть не так, где искать баги. (скрин ниже) ...

Debug assertion failed - C++
Я в с++ делаю первые шаги, так-что прошу сильно не пинать :) При вызове этой функции int qwerty(CComQIPtr &lt;IBody2&gt; pBody) { ...

Debug assertion failed - C++
Во время отладки вылазит такая ошибка,не могу понять в чём дело

Debug assertion failed - C++
Здравствуйте! Есть 2 двусвязных списка. Нужно написать метод merge который эти списки соединяет. Сам метод я написал. Запускаю, ввожу...

Debug Assertion Failed C++ - C++
Здравствуйте. Не могу понять что не так. Выдает ошибку. Помогите разобраться и подправить. #include&lt;string.h&gt; #include&lt;iostream&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.06.2014, 02:45 #2
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Скажите, в чем проблема?
Открытие файла для чтения всегда проверять нужно. В файле что? Как создавался?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
11.06.2014, 02:51  [ТС] #3
alsav22, Я знаю, что нужно делать проверку. Но с проверкой система не примет ответ к задаче.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.06.2014, 02:59 #4
Отладчиком смотрели, данные правильно читаются?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
11.06.2014, 12:37  [ТС] #5
alsav22, В общем, я нашел файл merge.dat, открыл его и оказалось, что он пуст. Сделал проверку и удостоверился в этом. Но как он может быть пуст, если я открываю его с флагом r и считываю с него данные?

Добавлено через 9 часов 1 минуту
Вопрос еще в силе. Объясните, почему мой файл merge.dat пуст? Ведь я с него считываю данные.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.06.2014, 17:30 #6
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
общем, я нашел файл merge.dat
Поздравляю!
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
открыл его и оказалось, что он пуст
Какая неожиданность!...
Цитата Сообщение от alsav22 Посмотреть сообщение
В файле что? Как создавался?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Но как он может быть пуст, если я открываю его с флагом r и считываю с него данные?
Цитата Сообщение от alsav22 Посмотреть сообщение
Отладчиком смотрели?
Как видите, что данные читаются?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Объясните, почему мой файл merge.dat пуст?
Вы его заполняли, чтобы он не был пуст? Если нет, то почему он должен быть не пуст? Только от того, что вы его открываете для чтения?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
11.06.2014, 17:53  [ТС] #7
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
Вы его заполняли, чтобы он не был пуст? Если нет, то почему он должен быть не пуст? Только от того, что вы его открываете для чтения?
Вот подобная программа, которую я писал как мне объяснили и она работает. Я ее так же писал как эту.
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
#include <stdio.h>
 
int main()
{
    long long int x1,y1,x2,y2,x3,y3;
    long long int a,b;
 
    FILE *c;
    FILE *d;
 
    c = fopen("trian.dat", "r");
    fscanf(c,"%lld %lld\n%lld %lld\n%lld %lld\n%lld %lld", &x1, &y1, &x2, &y2, &x3, &y3, &a, &b);
    fclose(c);
 
    d = fopen("trian.sol", "w");
 
    if((a-x1)*(y1-y2)-(b-y1)*(x1-x2) >= 0 && (a-x2)*(y2-y3)-(b-y2)*(x2-x3) >= 0 && (a-x3)*(y3-y1)-(b-y3)*(x3-x1) >= 0)
        fprintf(d,"YES");
    else
        fprintf(d,"NO");
    fclose(d);
 
    return 0;
}
Повторюсь, она работает. Хотя с файлами в ней я работаю так же, как в этой программе.
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
#include <stdio.h>
 
int n, m;
int i, q, d;
 
void merge(int a[], int b[], int c[], int n, int m){
    int A(0), B(0);
 
    while((A + B) < (n + m))
    {
        if( (B >= m) || ( (A < n) && (a[A] >= b[B]) ) )
        {
            c[A + B] = a[A];
            ++A;
        } else
        {
            c[A + B] = b[B];
            ++B;
        }
    }
}
int main()
{
    FILE *f;
    FILE *e;
    f = fopen("merge.dat", "r");
 
    fscanf(f,"%d", &n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        fscanf(f,"%d", &a[i]);
    fscanf(f,"%d", &m);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        fscanf(f,"%d", &b[q]);
    fclose(f);
 
    e = fopen("merge.sol", "w");
    int *c = new int[n + m];
 
    merge(a, b, c, n, m);
 
    for(d = 0; d < (n + m);d++)
        fprintf(e,"%d\n", c[d]);
    fclose(e);
 
    delete[]a;
    delete[]b;
    delete[]c;
 
    return 0;
}
Так в чем же тогда проблема? Я готов к ответу "в программисте".
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.06.2014, 18:06 #8
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Вот подобная программа, которую я писал как мне объяснили и она работает.
Даже смотреть не буду. На вопросы ответьте, если хотите разбираться.
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
11.06.2014, 20:26 #9
серьезно попробуй проверить что читается корректно все.
попробуй напиши чтение так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
if(fscanf(f, "%d", &n) != 1)
{
cout << "WTF" << endl;
while(1);
}
 
for(int i = 0; i < n; i++)
if(fscanf(f, "%d", &a[i]) != 1)
{
cout << "WTF 2" << endl;
while(1);
}
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
12.06.2014, 23:29  [ТС] #10
Цитата Сообщение от alsav22 Посмотреть сообщение
В файле что? Как создавался?
Повторюсь, файл пуст. В нем ничего нет.
Цитата Сообщение от alsav22 Посмотреть сообщение
Отладчиком смотрели?
Смотрел. Может я не так смотрел. Но при отладке тоже выводит ошибку, как только доходит до функции main.
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
"Debug Assertion Failed. Line 52"
Отлаживал в меню Отладка. Первый раз это делал. Надеюсь, правильно.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 00:14 #11
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
файл пуст.
Извините за наивный вопрос: а почему он пуст?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
файл пуст. В нем ничего нет.
В чём тогда вопрос? Хотите, чтобы ваш код читал данные из пустого файла?
На вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
Как создавался?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
13.06.2014, 00:41  [ТС] #12
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
Как создавался?
Как это понять? Я читаю Дайтела и там нету ничего о создании файлов. Описывается только об открытии файлов для записи, чтения, чтения с конца, записи с конца.
Вот я так понимаю, что здесь
C++
1
f = fopen("merge.dat", "r");
я открываю файл, чтоб считать данные с него данные. А вот здесь
C++
1
e = fopen("merge.sol", "w");
открываю файл, чтоб записать в него результат. Я следую примерам из книги.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 00:50 #13
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Как это понять?
Понять это так: файл, который открывается для чтения, уже должен существовать (кстати, откуда он у вас появился, но пустой?). Создавать его можно вручную (блокнотом, например), и заносить туда данные вручную. Можно программно создавать, тогда нужно сначала открыть файл для записи, при этом файл создастся, и программно записать в него данные.
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Я читаю Дайтела и там нету ничего о создании файлов.
Не может быть, чтобы там об этом ничего не было сказано. Наверное, опять: читаете одно, смотрите другое, пишите третье?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 666
13.06.2014, 01:37  [ТС] #14
alsav22, Спасибо вам огромное. ВЫ ЖЕ МОЙ ДОРОГОЙ И ВРЕДНЫЙ ЧЕЛОВЕК Доделал программу.
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
#include <stdio.h>
 
int n, m;
int i, q, d;
 
void merge(int a[], int b[], int c[], int n, int m){
    int A(0), B(0);
 
    while((A + B) < (n + m))
    {
        if( (B >= m) || ( (A < n) && (a[A] >= b[B]) ) )
        {
            c[A + B] = a[A];
            ++A;
        } else
        {
            c[A + B] = b[B];
            ++B;
        }
    }
}
int main()
{
    FILE *g;
    FILE *f;
    FILE *e;
 
    g = fopen("merge.dat", "w");
    fprintf(g,"%d", n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        fprintf(g,"%d", a[i]);
    fprintf(g,"%d", m);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        fprintf(g,"%d", b[q]);
    fclose(g);
 
    f = fopen("merge.dat", "r");
 
    fscanf(g,"%d", &n);
 
    for(i = 0; i < n;i++)
        fscanf(g,"%d", &a[i]);
    fscanf(g,"%d", &m);
 
    for(q = 0;q < m;q++)
        fscanf(g,"%d", &b[q]);
    fclose(f);
 
    e = fopen("merge.sol", "w");
    int *c = new int[n + m];
 
    merge(a, b, c, n, m);
 
    for(d = 0; d < (n + m);d++)
        fprintf(e,"%d\n", c[d]);
    fclose(e);
 
    delete[]a;
    delete[]b;
    delete[]c;
 
    return 0;
}
Все работает. Но мне все равно выводит "Неправильный ответ". Как же меня бесят эти "Неправильные ответы" Я проверял этот код без создания файлов. Ответ был верный.
Суть программы: вводятся 2 массива. Числа в них идут в убывающем порядке. Потом они объединяются в один массив, в котором все числа идут в убывающем порядке. Я решил воспользоваться процедурой слияния.

Добавлено через 2 минуты
В функции merge и происходит слияние.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 02:03 #15

Не по теме:

Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Спасибо вам огромное. ВЫ ЖЕ МОЙ ДОРОГОЙ И ВРЕДНЫЙ ЧЕЛОВЕК
Я знал, что мы подружимся...


Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Все работает.
Удивительное, буквально, рядом ...
C++
1
2
3
4
5
6
7
8
9
    int n, m;
...
    g = fopen("merge.dat", "w");
    fprintf(g,"%d", n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        fprintf(g,"%d", a[i]);
...
Создаёте файл и открываете его для записи, записываете туда неинициализированную переменную n, создаёте массив неизвестного размера, пустой. Записывете данные (какие, если он неинициализирован?) из этого массива в файл и т.д. И это всё работает? Вы в файл заглядывали, после такой записи?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 02:03
Привет! Вот еще темы с ответами:

Debug Assertion Failed - C++
Ошибка. Не могу понять что не так. Как я понял с дебагера, проблема во втором освобождении памяти. Вообщем хелп ми) // hw_3.cpp :...

debug assertion failed - C++
Помогите пожалуйста,пишет debug assertion failed,когда запускаю .exe, а когда компилирую в программе и запускаю,все отлично идёт,в чем...

Debug assertion failed - C++
#include &lt;iostream&gt; using namespace std; class Employee { friend class Leader; private: char m_name; char m_no; public: ...

Debug Assertion Failed! - C++
Доброго времени суток! Не могу понять где ошибка, подскажите пожалуйста. код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.06.2014, 02:03
Ответ Создать тему
Опции темы

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