Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
strspy_29
0 / 0 / 0
Регистрация: 10.11.2011
Сообщений: 1
1

Структуры и связные списки. Нарушение прав доступа при записи

13.11.2011, 13:54. Просмотров 955. Ответов 1
Метки нет (Все метки)

исполняемый файл запускаеться , а когда начинаю вводить данные с клавиатуры выскакует ошибка :
Необработанное исключение в "0x00a916f8" в "LAB3.exe": 0xC0000005: Нарушение прав доступа при записи "0xccccccf0".
вот текст программы:
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "malloc.h"
#include "string.h"
 struct emlp {
    char name [25] ; 
    int hight ;
    int grade;
     struct emlp *next ; 
};
struct emlp *emlph=NULL ; 
char fname[]="D:\data_struct.dat";
int f_print () {
    struct emlp *a ; 
    int i,j ; 
    if (emlph==NULL) printf ("List empty\n");
    else {
        for (a=emlph , i=1 , j=1; a!=NULL; a=a->next , j++ , i++)
        {
            printf ("#%-2d %-10s %-4d %-4d\n" , i, a->name , a->grade , a->hight);
            if (j==20) {
                printf ("Press any key for continue...\n");
                getch();
                j=1;
            }
        }
        printf ("====== end of list ======\n");
    }
    return 0 ; 
}
int f_add () {
    struct emlp *a , *b;
    char ss[40];
    int i=1;
    if (emlph!=NULL)
        for (i++,a=emlph; a->next!=NULL ; a=a->next , i++);
    printf ("Line #%d. Enter: name grade hight >" , i );
    scanf ("%s" , ss);
    if (ss[0]=='*') return 2 ; 
    b=(emlp *)malloc(sizeof(emlp));
    strcpy(b->name , ss);
    scanf ("%d %d" , &(b->grade), &(b->hight));
    b->next=NULL;
    if (emlph=NULL) emlph=b;
 
    else a->next=b;
    return 0 ;
}
int f_input () {
    int cc;
    printf ("Enter name =* for end of stream\n");
    while (!(cc=f_add())); 
    return cc ; 
}
int f_save () {
    FILE *dat;
    struct emlp *a;
    dat=fopen(fname , "w"); // открытия файла на запись // 
    for (a=emlph ; a!=NULL ; a=a->next)
        fprintf (dat,"%s %d %d\n" , a->name , a->grade , a->hight);
    fprintf (dat, "***\n");
    fclose(dat);
    return 0 ;
}
int f_restore () {
    FILE *dat;
    char ss[40];
    struct emlp  *a , *b;
    if ((dat=fopen(fname, "r"))=NULL) {
        printf ("File not found : %s\n" , fname);
        return 1; 
    }
    else {
    emlph=NULL;
        do { 
            fscanf (dat , "%s" , ss);
            if (ss[0]!='*'); { b=(emlp *)malloc(sizeof(emlp));
            if (emlph=NULL) emlph=b;
            else a->next=b;
            strcpy (b->name , ss);
            fscanf (dat , "%d %d\n" , &(b->grade) , &(b->hight));
            b->next=NULL;
            a=b;
            }
        } while (ss[0]!='*');
        fclose (dat);
    }
    return 0 ;
    }
int f_sort () {
    int n ; 
    struct emlp *a , *b , *c;
    if ((emlph==NULL) || (emlph->next==NULL)) return 0 ;
    for (n=1 ; n ; ) {
        n=0; 
        for (a=emlph , b=emlph->next; b!=NULL; ) 
            if (strcmp(a->name , b->name) > 0 ) {
                a->next=b->next ; b->next=a;
                if (a==emlph) emlph=b;
                else c->next=b;
                c=b; b=a->next;
                n=1;
            }
            else {
                c=a ; a=b ; b->next ; 
            }
    }
    return 0 ;
}
int get_ln () {
    int ln ; 
    printf ("Enter line number >");
    do {
        scanf ("%d" , &ln);
        if (ln<1) {
            printf ("Illegial line number. Try again >");
            ln=0;
        }
    } while (!ln);
    return ln;
}
int f_delete () {
    int ln;
    emlp *a , *b;
    if (emlph=NULL) printf ("List empty\n");
    else {
        ln=get_ln()-1;
        if (!ln) {
            a=emlph ; emlph=a->next; free(a);
        }
        else {
            for (ln-- , a=emlph ; ln&&(a!=NULL); a=a->next , ln--);
            if (a!=NULL)
                if ((b=a->next)!=NULL) {
                    a->next=b->next ; free (b);
                }
        }
    }
    return 0 ; 
}
int f_change () {
    char ss [40];
    int ln;
    struct emlp *a;
    ln=get_ln()-1;
    for (a=emlph ; ln && a!=NULL ; ln--, a=a->next);
    if (ln) return 0 ;
    printf ("Old name = %s New name >", a->name);
    gets(ss);
    gets(ss);
    if (*ss) strcpy(a->name , ss);
    printf ("Old grade = %d New grade >" , a->grade);
    gets(ss) ;
    if (*ss) sscanf (ss , "%d" , &(a->grade));
    printf ("Old hight = %d New hight >" , a->hight);
    gets (ss);
    if (*ss) sscanf (ss , "%d" , &(a->hight));
    return 0 ;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int opcode ; 
    for ( ; ; ) {
        printf ("1. Print\n");
        printf ("2. Add\n");
        printf ("3. Input\n");
        printf ("4. Delete\n");
        printf ("5. Change\n");
        printf ("6. Sort\n");
        printf ("7.Save\n");
        printf ("8. Restore\n");
        printf ("0. Quit\n");
        printf ("Enter operation code >");
        opcode=getche(); 
        putchar ('\n');
        switch (opcode)
        {
        case '1':f_print () ; getch(); break ; 
        case '2':f_add () ; getch() ; break ; printf ("dobavleno");
        case '3':f_input () ; getch () ; break ; printf ("vvedeno"); 
        case '4':f_delete(); getch() ; break ; printf ("ydaleno");
        case '5':f_change() ; getch () ; break ; printf ("izmeneno");
        case '6':f_sort() ; getch() ; break ; printf ("otsortirovano");
        case '7':f_save() ; getch() ; break ; printf ("sohraneno");
        case '8':f_restore() ; getch () ; break ; printf ("perestavleno");
            printf ("vihod iz programmu") ;
            getch();
            return 0 ; } }
 
    return 0;
}
Добавлено через 37 минут
все нашел ошибку) пропустил одно = в 45 строке . )))
Цитата Сообщение от strspy_29 Посмотреть сообщение
if (emlph==NULL) emlph=b;
Добавлено через 5 минут
после исправлений программа начала циклить. не пойму . неужели гдето вечный цикл??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2011, 13:54
Ответы с готовыми решениями:

Нарушение прав доступа при записи по адресу 0х00000000 при добавлении элемента структуры
прошу помощи, выбивает эту ошибку при добавлении элемента структуры, также приму во внимание другие...

Нарушение прав доступа при записи
Здравствуйте! Я новичок на вашем форуме, буду рад различного рода советам, относящимся к нему. ...

Нарушение прав доступа при записи
подскажите почему возникает ошибка void ChangeBrightness(HDC hdc, RECT In, RECT Out, DWORD Mode,...

Нарушение прав доступа при записи
Подскажите, пожалуйста, почему при запуске такой программы(она должна в файле подсчитывать...

Ошибка: нарушение прав доступа при записи по адресу
Надо написать следующую программу: дан символьный массив из 101 элемента. По спецификации %s...

1
Dar101
40 / 40 / 7
Регистрация: 12.05.2011
Сообщений: 109
13.11.2011, 15:07 2
Может быть там и есть вечный цикл, пройдите программу в режиме отладки, посмотрите, где она начинает бесконечно крутиться.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2011, 15:07

Нарушение прав доступа при записи по адресу 0x00007430
Подскажите, пожалуйста, почему при выполнении программы появляется Вызвано исключение по адресу...

Нарушение прав доступа при записи (работа с файлами)
вообщем такая проблема (на скринах),если я правильно понял то что то с переменной не так. прощу...

Динамические массивы: Нарушение прав доступа при записи по адресу 0xCCCCCCCC
При запуске возникает ошибка &quot;Нарушение прав доступа при записи по адресу 0xCCCCCCCC&quot;. Помогите...


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

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

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