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

Память не может быть прочитала - C++

Восстановить пароль Регистрация
 
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
17.10.2013, 18:41     Память не может быть прочитала #1
Здравствуйте, вот есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Dyn{
    Syt select;
    Dyn* next;
};
 
............
 
void Coal::add(Syt data){
    Dyn *temp = new(Dyn);
    temp->select=data;
    for(int i=0;i<=count;i++){
        if(i==count)first->next=temp;
    }
    count++;
}
Если закомментировать if(i==count)first->next=temp; то ошибка пропадает
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 18:41     Память не может быть прочитала
Посмотрите здесь:

Память не может быть "written" C++
В чём может быть ошибка? C++
C++ Как такое может быть?
Память не может быть прочитана! C++
Где может быть ошибка? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
17.10.2013, 18:45     Память не может быть прочитала #2
либо first указывает на невыделенную память либо next
без полного кода не понять
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
17.10.2013, 18:53  [ТС]     Память не может быть прочитала #3
CPP
Кликните здесь для просмотра всего текста
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
#include "struct.h"
 
Coal::Coal(){
    count=0;
}
Coal::Coal(Syt data)
{
    first=0;
    count=1;
    add(data);
}
void Coal::add(Syt data){
    Dyn *temp = new(Dyn);
    temp->select=data;
    for(int i=0;i<=count;i++){
        if(i==count)first->next=temp;
    }
    count++;
}
 
bool Coal::del(int i){
    Dyn *temp=first;
    if(i>=count) return false;
    for(int j=0;j<i;j++){
        if(j-count==i-1) temp->next=temp->next->next;
        if(j-count==i) delete(temp);
        temp=temp->next;
    }
}
 
int Coal::g_count(){
    return count;
}
 
Syt Coal::get(int i){
   /* Dyn *temp=first;
    for(int j=0;j<=i;j++){
        if(j==i) return temp->select;
        temp->select=temp->next->select;
    }*/
}


H
Кликните здесь для просмотра всего текста
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
#ifndef STRUCT_H
#define STRUCT_H
#include <QtGui>
struct Syt
{
    int group;
    int price;
    float pn;
    float vt;
    float sr;
    float ch;
    float pt;
    float itogo;
};
 
struct Dyn{
    Syt select;
    Dyn* next;
};
 
class Coal{
protected:
    int count;
    Dyn* first;
public:
    Coal();
    Coal(Syt);
 
    int g_count();
    void add(Syt);
    void sort();
    bool del(int);
    Syt get(int i);
};
#endif // STRUCT_H
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
17.10.2013, 18:56     Память не может быть прочитала #4
Цитата Сообщение от wollk Посмотреть сообщение
first=0;
в конструкторе first = 0 а вы пытаетесь взять от него next в функции add
wollk
1 / 1 / 0
Регистрация: 17.02.2013
Сообщений: 142
17.10.2013, 19:06  [ТС]     Память не может быть прочитала #5
Так я же пытаюсь ноль заменить на temp. Так нельзя ?

Заменил на first->next=0; - ошибка осталась

Как тогда правильно сделать ? Мне нужно добавлять новый элемент в конец, для этого мне нужно у предыдущего элемента поменять next с 0 (или любого другого значения) на ссылку на мою структуру.

Это типа мы делаем динамический массив структур

Добавлено через 2 минуты
Ой протупил ((((

C++
1
first = new Dyn;
это помогло
Yandex
Объявления
17.10.2013, 19:06     Память не может быть прочитала
Ответ Создать тему
Опции темы

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