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

Не пойму почему перменная d изменяет значения - C++

Восстановить пароль Регистрация
 
Plohoj
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 41
11.05.2014, 01:37     Не пойму почему перменная d изменяет значения #1
C++ (Qt)
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
// Kursovay_2.cpp: определяет точку входа для консольного приложения.
//После выхода из функции graf_null изменяется перменная d
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
 
struct list{
    int data;
    list *next;
};
void graf_input(list **graf, int t1, int t2);
void graf_output(list **graf, int k);
void graf_null(list **graf, int k);
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "rus");
    int d;
    cout << "Введите номер последней вершины: ";
    cin >> d;
    cout << d;
    list *graf = new list[d];
    cout << "Введите вршины рёбер, 0 - конец ввода: ";
 
    graf_null(&graf, d);
    int t1, t2;
    cin >> t1 >> t2;
    while (t1 || t2){
        graf_input(&graf, t1, t2);
        cin >> t1 >> t2;
    }
    graf_output(&graf, d);
    _getch();
    return 0;
}
 
void graf_input(list **graf, int t1, int t2){
    list *tmp1 = new list; list *tmp2 = new list;
    tmp1->data = t2;
    tmp2->data = t1;
    tmp1->next = tmp2->next=0;
    if (graf[t1 - 1] == 0)
    {
        graf[t1-1] = tmp1;
        graf[t2 - 1] = tmp2;
    }
    else
    {
        graf[t1-1]->next = tmp1;
        graf[t2 - 1]->next = tmp2;
    }
}
void graf_output(list **graf, int k){
    list *p;
    for (int i = 0; i < k; i++)
    if ((graf[i] == 0))
    for (p = graf[i]; p; p = p->next)
        cout << i << ": " << p->data << " " << "\n";
 
}
void graf_null(list **graf, int k){
    for (int i = 0; i < k ; i++)
        graf[i] = 0;
}
Добавлено через 1 минуту
не обращаем внимание на то что нет проверки на выход за границы массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
11.05.2014, 01:41     Не пойму почему перменная d изменяет значения #2
А поподробнее? Где именно она меняет значение?
MegaCoder
6 / 2 / 1
Регистрация: 10.03.2014
Сообщений: 17
11.05.2014, 01:50     Не пойму почему перменная d изменяет значения #3
Почитайте про "пошаговою отладку" - очень крутая штука, в двух словах: каждый оператор выполняется по нажатию кнопки. т.е. можно отследить за "развитием событий" , так же есть окошко с переменными (которые меняются). должна быть во всех нормальных средах разработки (IDE). Есть возможность "стартануть" с нужного участка кода.
Plohoj
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 41
11.05.2014, 01:54  [ТС]     Не пойму почему перменная d изменяет значения #4
А поподробнее? Где именно она меняет значение?
После выхода из функции graf_null изменяется перменая d я писал в коментарии программы
Почитайте про "пошаговою отладку"
Если бы не отладка я бы не понял что с d что то не то
MastAKK
 Аватар для MastAKK
144 / 135 / 12
Регистрация: 13.10.2012
Сообщений: 586
Записей в блоге: 1
11.05.2014, 02:26     Не пойму почему перменная d изменяет значения #5
Переменная не передаётся по указателю, не меняется.. Здравый смысл и логика подсказывают, что всё должно быть нормально. Вы уверены, что d меняется?
Plohoj
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 41
11.05.2014, 12:00  [ТС]     Не пойму почему перменная d изменяет значения #6
Отладчик показывает что d обнуляется когда выходишь из функции graf_null
А если так то собственно ошибку он кидает вообще фиг пойми какую

C++
1
2
3
4
5
6
7
8
9
10
11
int _tmain(int argc, _TCHAR* argv[])
{  ....
    cin >> t1 >> t2;
    while (t1 || t2){
        graf_input(&graf, t1, t2);
        cin >> t1 >> t2;
    }
    graf_output(&graf, d);
    _getch();
    return 0;
}//говорит здесь следующая ошибка
Run-Time Check Failure #2 - Stack around the variable 'd' was corrupted.
Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2014, 22:52     Не пойму почему перменная d изменяет значения
Еще ссылки по теме:

C++ Костантный метод изменяет значения переменных класса
C++ В общем, не пойму почему криво заполняется массив
Использована неиницизированная перменная z C++

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

Или воспользуйтесь поиском по форуму:
Plohoj
2 / 2 / 0
Регистрация: 16.02.2011
Сообщений: 41
14.05.2014, 22:52  [ТС]     Не пойму почему перменная d изменяет значения #7
Нашёл ошибку! Массив структур лучше делать как массив ссылок на структуру...
C++
1
list **graf = new list*[dlina];
Добавлено через 1 минуту
Тему можно закрывать!
Yandex
Объявления
14.05.2014, 22:52     Не пойму почему перменная d изменяет значения
Ответ Создать тему
Опции темы

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