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

Обнаружением нулевого указателя - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не роботает сортировка http://www.cyberforum.ru/cpp-beginners/thread1001169.html
Проблема в сортировке( программа проходит, но ничего полезного не делает), ее, мне так кажется, надо реализовать с помощью адресов. Буду рада всем вашым советам!!! main # include "class_m.h" # include <iostream> using namespace std; void main()
C++ Чтение из текстового файла Есть список автомобилей с параметрами (марка ,цвет ,стоимость и так далее ) , хранившиеся в текстовом файле . Нужно написать программу в которой делается следующее. корректировку или дополнение списка с клавиатуры; сортировку по названию марки,цвета, стоимости; вывод на экран информации о автомобиле, название которого введено с клавиатуры; запись списка в файл под тем же или новым... http://www.cyberforum.ru/cpp-beginners/thread1001166.html
Выявление ошибки C++
Помогите, пожалуйста, исправить программу (в функции treug в качестве параметра нужно использовать указатель *p), затем его использовать при вызове функции. Заранее большое спасибо. #include <iostream.h> #include <stdio.h> //vvod-vyvod #include <math.h> void treug(float a, float b, float c, int *p) { (*p)=0; if ((a+b>c) || (b+c>a) || (c+a>b)) {(*p)=1;
Как создать динамический двумерный массив C++
Можно ли создать на С++ динамический двухмерный масив? Как? int z , x ; cin >> z ; cin >> x ; int *arr = new int(z); int *arr1 = new int(x); так не получаеться!
C++ Удаление последнего слова из строки http://www.cyberforum.ru/cpp-beginners/thread1001131.html
Написать программу удаления последнего слова из строки. Заранее благодарю.
C++ Линейный массив Ребят, помогите решить задачку. Заранее спасибо!:) подробнее

Показать сообщение отдельно
Norfolks
0 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 4
07.11.2013, 22:22  [ТС]     Обнаружением нулевого указателя
Цитата Сообщение от Croessmah Посмотреть сообщение
И что мы должны понять из приведенного куска?
Цитата Сообщение от castaway Посмотреть сообщение
Почему ты решил что он его "пропускает"?
Цитата Сообщение от Alex0491 Посмотреть сообщение
Из приведенного куска кода и правда мало что понятно. Выложи код, где ты передаешь значение в MakeT (Node* root), и структуру Node
Попытаюсь описать подробнее

Функция MakeT() должна рекурсивно проходить по древу и натыкаясь в определённый момент в конец ветки т.е. когда следующий root->L не инициализирован, проверить правый отросток ну и т.д.

Но по некой неведомой причине в тот момент когда root->L==NULL if пропускает это мимо ушей вследствие чего MakeT запускается с нулевым указателем ( MakeT(NULL)) и в самой функции происходит вызов NULL->L, что вызывает ошибку.



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
struct Node {
    unsigned int power;
    char c;
    Node* L, *R;
    
};
//создание элементов дерева
for(im=h.begin();im!=h.end();im++){
        Node* p = new Node;
        p->power = im->second;
        p->c = im->first;
        t.push_back(p);
    }
//создание дерева
while(t.size()>1){
    t.sort(MySort());
    Node* L=t.front();
    t.pop_front();
    Node* R=t.front();
    t.pop_front();
 
    Node* p=new Node;
    p->L=L;
    p->R=R;
    p->power=L->power+R->power;
    t.push_back(p); 
}
    
Node* root= t.front();
MakeT(root);
Добавлено через 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
#include<iostream>
#include<vector>
#include<map>
#include<list>
 
using namespace std;
 
struct Node {
    unsigned int power;
    char c;
    Node* L, *R;
    
};
 
struct MySort{
    bool operator()(Node *l,Node *r)
        {return (*l).power<(*r).power;}
};
 
 
vector <int> code;
map<char, vector<int>> table;
 
void MakeT (Node* root){
    if(root->L!=NULL) {
        code.push_back(0);
        MakeT(root->L);
    }
    if(root->R!=NULL) {
        code.push_back(1);
        MakeT(root->R);
    }
    table[root->c]=code;
    code.pop_back();
}
 
 
 
 
 
int main(){
    map<char,int> h;
    map<char,int>::iterator im;
 
    FILE* F=fopen("D:\\M.txt","rb");
    char buf;
 
    while(fread(&buf,1,1,F)){
        h[buf]++;   
    }
 
 
    fseek(F,0,SEEK_SET);
    std::list<Node*> t;
    for(im=h.begin();im!=h.end();im++){
        Node* p = new Node;
        p->power = im->second;
        p->c = im->first;
        t.push_back(p);
    }
 
    while(t.size()>1){
        t.sort(MySort());
        Node* L=t.front();
        t.pop_front();
        Node* R=t.front();
        t.pop_front();
 
        Node* p=new Node;
        p->L=L;
        p->R=R;
        p->power=L->power+R->power;
        t.push_back(p); 
    }
    
    Node* root= t.front();
    MakeT(root);
    fseek(F,SEEK_SET,0);
    FILE* HAFM=fopen("D:\\Haff.txt","rb");
    char cr, count=0;
    while(fread(&buf,1,1,F)){
        for(int i=0;i<table[buf].size();i++){
            cr=cr|(table[buf][i]<<count);
            count++;
            if(count==8){
                count=0;
                fwrite(&cr,1,1,HAFM);
            }
        }
    
    }
 
    return 0;
 
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru