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

Debug Assertion Failed - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
11.06.2014, 02:39     Debug Assertion Failed #1
Привет всем. Написал такую программу.
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
Debug assertion failed C++
ошибка debug assertion failed C++
Debug assertion failed C++
C++ Debug Assertion Failed
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 04:42     Debug Assertion Failed #21
Зачем здесь, вообще, файлы? Из пустого в порожнее переливание...
Вот с файлами и с рандомами, но сортировка криво работает:
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
75
76
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
 
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");
 
    srand(time(0));
 
    fprintf(g, "%d\n", n = 1 + rand() % 10);
    int *a = new int[n];
 
    for(i = 0; i < n; i++)
        fprintf(g,"%d ", a[i] = rand() % 20);
    fprintf(g, "%c", '\n');
 
    fprintf(g, "%d\n", m = 1 + rand() % 10);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        fprintf(g,"%d ", b[q] = rand() % 20);
    fprintf(g, "%c", '\n');
    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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
13.06.2014, 04:50  [ТС]     Debug Assertion Failed #22
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#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");
 
    scanf("%d", &n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        scanf("%d", &a[i]);
 
    scanf("%d", &m);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        scanf("%d", &b[q]);
 
    fprintf(g, "%d\n", n);
 
    for(i = 0; i < (n - 1);i++)
        fprintf(g,"%d ", a[i]);
    fprintf(g, "%d\n", a[n-1]);
 
    fprintf(g, "%d\n", m);
 
    for(q = 0;q < (m - 1);q++)
        fprintf(g,"%d ", b[q]);
    fprintf(g, "%d\n", a[m - 1]);
    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;
}
Цитата Сообщение от alsav22 Посмотреть сообщение
но сортировка криво работает
То есть, дело может быть в сливании массивов?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 05:05     Debug Assertion Failed #23
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
но все равно выдает "Неправильный ответ".
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
То есть, дело может быть в сливании массивов?
Для этого достаточно открыть блокнотом файл merge.sol и посмотреть результат.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
13.06.2014, 14:26  [ТС]     Debug Assertion Failed #24
alsav22, Вот взгляните. Данные во входном и выходном файлах(изображения). Вроде же верно.
Изображения
  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 16:21     Debug Assertion Failed #25
C++
1
2
3
4
 
for(q = 0;q < (m - 1);q++)
     fprintf(g,"%d ", b[q]);
fprintf(g, "%d\n", a[m - 1]); // с какого испугу тут массив a[] появился?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Вроде же верно.
Насчёт сортировки я не знал, что числа, в исходных массивах, должны идти в невозрастающем порядке, поэтому и написал, что сортировка криво работает.
Sh@dow777
11 / 11 / 3
Регистрация: 10.12.2013
Сообщений: 645
13.06.2014, 17:20  [ТС]     Debug Assertion Failed #26
Цитата Сообщение от alsav22 Посмотреть сообщение
с какого испугу тут массив a[] появился?
да, это мой пролет) Сейчас попробую.

Добавлено через 11 минут
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#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");
 
    scanf("%d", &n);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        scanf("%d", &a[i]);
 
    scanf("%d", &m);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        scanf("%d", &b[q]);
 
    fprintf(g, "%d\n", n);
 
    for(i = 0; i < (n - 1);i++)
        fprintf(g,"%d ", a[i]);
    fprintf(g, "%d\n", a[n-1]);
 
    fprintf(g, "%d\n", m);
 
    for(q = 0;q < (m - 1);q++)
        fprintf(g,"%d ", b[q]);
    fprintf(g, "%d\n", b[m - 1]);
    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;
}
А вот, на всякий случай, условие задачи.

Формат входного файла merge.dat

Текстовый файл merge.dat содержит четыре строки. В первой строке записано натуральное число N (1 ≤ N ≤ 100 000) — количество дуболомов в первой шеренге.

Вторая строка содержит N натуральных чисел, записанных через пробел. Числа идут в невозрастающем порядке. Каждое число лежит в диапазоне от 1 до 1 000 000 000.

В третьей строке записано натуральное число M (1 ≤ M ≤ 100 000) — количество дуболомов во второй шеренге.

Четвертая строка содержит M натуральных чисел, записанных через пробел. Числа идут в невозрастающем порядке. Каждое число лежит в диапазоне от 1 до 1 000 000 000.

Формат выходного файла merge.sol

Текстовый файл merge.sol должен содержать N+M чисел, идущих в невозрастающем порядке. Каждое число — это рост соответствующего дуболома из первой или из второй шеренги. Каждое число должно выводиться в отдельную строку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 17:22     Debug Assertion Failed
Еще ссылки по теме:

C++ Debug assertion failed
Debug assertion failed C++
Debug Assertion Failed! C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 17:22     Debug Assertion Failed #27
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Все равно
Это, к найденной ошибке, не относится. Выручало то, что массивы одинаковой длины, и последние элементы одинаковые.
Yandex
Объявления
13.06.2014, 17:22     Debug Assertion Failed
Ответ Создать тему
Опции темы

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