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

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

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

Debug Assertion Failed - C++

11.06.2014, 02:39. Просмотров 1980. Ответов 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
Посмотрите здесь:

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

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

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,когда запускаю .exe, а когда компилирую в программе и запускаю,все отлично идёт,в чем...

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
13.06.2014, 02:42  [ТС]     Debug Assertion Failed #16
alsav22, Да, в файле 2 нуля... Но мне нужно сделать так, как в программе без файлов. То есть в программе без файлов я сам ввожу размер и элементы массива. То есть мне нужно сделать так, чтоб при каждом запуске программы в файле "merge.dat" были разные размеры и элементы массивов. Такое можно сделать?
На изображении пример входных и выходных данных.
Миниатюры
Debug Assertion Failed  
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 03:36     Debug Assertion Failed #17
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
То есть мне нужно сделать так, чтоб при каждом запуске программы в файле "merge.dat" были разные размеры и элементы массивов. Такое можно сделать?
Можно. Делайте рандомные значения n и m, создавайте массивы, заполняйте их рандомными значениями, записывайте в файл.

Добавлено через 1 минуту
http://cppstudy.wordpress.com/2009/0...umbers-in-cpp/
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
13.06.2014, 03:58  [ТС]     Debug Assertion Failed #18
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
#include <stdio.h>
#include <stdlib.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 = rand() % 100001);
    int *a = new int[n];
 
    for(i = 0; i < n;i++)
        fprintf(g,"%d", a[i] = 1 + rand() % 1000000001);
    fprintf(g, "%d", m = rand() % 100001);
    int *b = new int[m];
 
    for(q = 0;q < m;q++)
        fprintf(g,"%d", b[q] = 1 + rand() % 1000000001);
    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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 04:16     Debug Assertion Failed #19
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Теперь в файле в одну строчку записано ОЧЕНЬ много чисел.
К чему такой максимальный размер массива - 100001?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Но при каждом запуске программы числа не изменяются.
Информацию по ссылке читали?
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
13.06.2014, 04:37  [ТС]     Debug Assertion Failed #20
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;
}
Сейчас проверять буду.

Добавлено через 3 минуты
И снова неправильный ответ Это несправедливость.

Добавлено через 6 минут
alsav22, Скажите, а вот в выходном файле "merge.sol" я создаю массив C[n + m]. Для выходного файла переменные n, m уже известны?
alsav22
5416 / 4812 / 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
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
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
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.06.2014, 05:05     Debug Assertion Failed #23
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
но все равно выдает "Неправильный ответ".
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
То есть, дело может быть в сливании массивов?
Для этого достаточно открыть блокнотом файл merge.sol и посмотреть результат.
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
13.06.2014, 14:26  [ТС]     Debug Assertion Failed #24
alsav22, Вот взгляните. Данные во входном и выходном файлах(изображения). Вроде же верно.
Изображения
  
alsav22
5416 / 4812 / 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
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 664
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
Еще ссылки по теме:

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++
Создавал небольшой генератор ролей для персонажа и натолкнулся на проблему пиктрелейтед. До определенного момента все работало, пока я не...

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

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

Ошибка Debug Assertion Failed - C++
Доброго времени суток, срочно нужна помощь, такая проблема: есть программа шифрования методом Гронсфельда по английскому алфавиту, для...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 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
Ответ Создать тему
Опции темы

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