Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Дмитрий_36
3 / 3 / 4
Регистрация: 14.10.2013
Сообщений: 67
1

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

24.04.2016, 16:29. Просмотров 371. Ответов 5
Метки нет (Все метки)

Ребят, умоляю помогите. Незнаю что я опять делаю не так, но выдает такую ошибку.
В общем задание такое:
Работа с бинарными файлами.
Матрица целых чисел записана по строкам в файл. Не используя нового файла, удалить нулевые строки матрицы из исходного файла.

Вот код:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <conio.h>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
    setlocale(0, "");
    string nf = "binary_file.dat";
    //-----------------------------------------------------------------------------
    cout << "----------------Запись в файл------------------" << endl;
    int n, m;
    cin >> n; cin.clear(); cin.sync();
    cin >> m; cin.clear(); cin.sync();
    int **a = new int*[n];
    for (int i(0); i < n; i++)
        a[i] = new int[m];
 
    cout << "Массив А:" << endl;
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < m; j++)
        {
            cin >> a[i][j];
        }
    }
    ofstream f(nf, ios::binary);
    f.write((char*)a, sizeof(int) * n * m);
    f.close();
    cout << "----------------Чтение из файла------------------" << endl;
    int **b = new int *[n];
    for (int i(0); i < n; i++)
        b[i] = new int[m];
    ifstream f1(nf, ios::binary | ios::in);
    f1.read((char*)b, sizeof(int) * n * m);
    int k = 0, g = n;
    vector<int>d(n);
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < m; j++)
        {
            if (b[i][j] == 0)
                k++;
            cout << b[i][j] << ' ';
        }
        if (k == m)
        {
            k = 0;
            g--;
            d.push_back(i);
        }
        k = 0;
        cout << endl;
    }
    f1.close();
    cout << "Готовая матрица" << endl;
    int **c = new int *[g];
    for (int i(0); i < g; i++)
        c[i] = new int[m];
    for (int i(0); i < g; i++)
    {
        int z = 0;
        while (z < d.size())
        {
            if (i != d[z])
            {
                for (int j(0); j < m; j++)
                {
                    c[i][j] = b[i][j];
                }
            }
            else
            {
                for (int j(0); j < m; j++)
                    c[i][j] = b[i + 1][j];
            }
            z++;
        }
        for (int j(0); j < m; j++)
            cout << c[i][j] << ' ';
        cout << endl;
    }
    cout << endl;
    f.open(nf, ios::trunc | ios::binary | ios::out);
    f.write((char*)c, sizeof(int)*g*m);
    f.close();
    d.clear();
    for (int i(0); i < n; i++)
        delete[] a[i];
    delete[] a;
    for (int i(0); i < n; i++)
        delete[] b[i];
    delete[] b;
    for (int i(0); i < g; i++)
        delete[] b[i];
    delete[] b;
    _getch();
    return 0;
}
Вот скриншот ошибки, а так вроде правильно все выполняет.
0
Миниатюры
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2016, 16:29
Ответы с готовыми решениями:

phead->nblockuse
помогите нейтрализовать ошибку. есть структура struct tim{ WORD wMonth; WORD wDay; WORD...

_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Нужна помощь гуру. Искать ошибку тут в коде ненужно, сам все нашёл, мне нужно объяснение почему...

Ошибка pHead->nBlockUse
После выполнения программы выскакивает ошибка. Почитал на форумах, что проблема или в деструкторе...

Деструктор и _Block_Type_Is_Valid (pHead->nBlockUse)
Приветствую! Встретился сегодня с такой проблемой. Есть функция, которая возвращает объект. При...

Ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Здравствуйте. Я работаю с таким кодом. При выполнении строк 92-107 программа выдаёт окно с...

5
zss
Модератор
Эксперт С++
8068 / 7211 / 4496
Регистрация: 18.12.2011
Сообщений: 19,076
Завершенные тесты: 1
24.04.2016, 16:41 2
Цитата Сообщение от Дмитрий_36 Посмотреть сообщение
f.write((char*)a, sizeof(int) * n * m);
a - это адрес массива указателей.
Соответственно, этот оператор перепишет в файл n штук указателей и то, что записано за этими указателями.
Т.е. совсем не то, что вы хотели.
Писать и, соответственно, читать надо каждую строку в отдельности.
C++
1
2
3
4
5
    ofstream f(nf, ios::binary);
    for (int i(0); i < n; i++)
    {
        f.write((char*)a[i], sizeof(int) *m);
    }
1
Дмитрий_36
3 / 3 / 4
Регистрация: 14.10.2013
Сообщений: 67
24.04.2016, 16:52  [ТС] 3
zss, Спасибо, исправил
теперь вот такой косяк
0
Миниатюры
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)  
Дмитрий_36
3 / 3 / 4
Регистрация: 14.10.2013
Сообщений: 67
24.04.2016, 16:52  [ТС] 4
хотя на консоле вроде все правильно показало
вот код исправленный:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <iostream>
#include <conio.h>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
    setlocale(0, "");
    string nf = "binary_file.dat";
    //-----------------------------------------------------------------------------
    cout << "----------------Запись в файл------------------" << endl;
    int n, m;
    cin >> n; cin.clear(); cin.sync();
    cin >> m; cin.clear(); cin.sync();
    int **a = new int*[n];
    for (int i(0); i < n; i++)
        a[i] = new int[m];
 
    cout << "Массив А:" << endl;
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < m; j++)
        {
            cin >> a[i][j];
        }
    }
    ofstream f(nf, ios::binary);
    for (int i(0); i < n; i++)
    {
        f.write((char*)a[i], sizeof(int) *m);
    }
    f.close();
    cout << "----------------Чтение из файла------------------" << endl;
    int **b = new int *[n];
    for (int i(0); i < n; i++)
        b[i] = new int[m];
    ifstream f1(nf, ios::binary | ios::in);
    for (int i(0); i < n; i++)
    {
        f1.read((char*)b[i], sizeof(int) *m);
    }
    int k = 0, g = n;
    vector<int>d(n);
    for (int i(0); i < n; i++)
    {
        for (int j(0); j < m; j++)
        {
            if (b[i][j] == 0)
                k++;
            cout << b[i][j] << ' ';
        }
        if (k == m)
        {
            k = 0;
            g--;
            d.push_back(i);
        }
        k = 0;
        cout << endl;
    }
    f1.close();
    cout << "Готовая матрица" << endl;
    int **c = new int *[g];
    for (int i(0); i < g; i++)
        c[i] = new int[m];
    for (int i(0); i < g; i++)
    {
        int z = 0;
        while (z < d.size())
        {
            if (i != d[z])
            {
                for (int j(0); j < m; j++)
                {
                    c[i][j] = b[i][j];
                }
            }
            else
            {
                for (int j(0); j < m; j++)
                    c[i][j] = b[i + 1][j];
            }
            z++;
        }
        for (int j(0); j < m; j++)
            cout << c[i][j] << ' ';
        cout << endl;
    }
    cout << endl;
    f.open(nf, ios::trunc | ios::binary | ios::out);
    for (int i(0); i < n; i++)
    {
        f.write((char*)c[i], sizeof(int) *m);
    }
    f.close();
    d.clear();
    for (int i(0); i < n; i++)
        delete[] a[i];
    delete[] a;
    for (int i(0); i < n; i++)
        delete[] b[i];
    delete[] b;
    for (int i(0); i < g; i++)
        delete[] c[i];
    delete[] c;
    _getch();
    return 0;
}
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4853 / 2496 / 697
Регистрация: 18.10.2014
Сообщений: 4,333
24.04.2016, 16:59 5
Цитата Сообщение от Дмитрий_36 Посмотреть сообщение
теперь вот такой косяк
Матрица c у вас имеет рамер [g][m], а не [n][m]. Об этом надо везде помнить. А вы, вроде, помните, но не везде.
1
Дмитрий_36
3 / 3 / 4
Регистрация: 14.10.2013
Сообщений: 67
24.04.2016, 17:11  [ТС] 6
TheCalligrapher, Спасибо, все, исправил.. ошибок нет.

Добавлено через 1 минуту
ребят помогите теперь создать мою матрицу С из матрицы В без нулевых строк, а то не все почему-то строки нулевые убираются.
0
24.04.2016, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2016, 17:11

C++ block type is valid phead nblockuse
День добрый. Задача такая : определить класс pvector, похожий на вектор указателей, за исключением...

При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Функция strtok влияет на массив second, после чего его невозможно удалить, не могу понять чего....

вот такая штука у меня _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
я знаю что здесь что-то с деструктором но я новичок поэтому сам никак не могу решить помогите ...


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

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

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