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

Нарушение прав доступа при чтении - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм удаления узла из дерева сортировки! http://www.cyberforum.ru/cpp-beginners/thread988098.html
Подскажите, если кто знает - где можно найти хоть какой-нибудь пример такой программы! Желательно на Си, если нет, то на любом другом ЯП. Сам алгоритм я нашёл, а вот подобных программ - что-то нет!
C++ создать прогу вичисления площади интеграла нужно вычислить определенный интеграл тремя методами: трапеции, симпсона и триугольника за функцией 0.5х в кубе http://www.cyberforum.ru/cpp-beginners/thread988054.html
создать прогу вичисления площади интеграла C++
нужно вычислить определенный интеграл тремя методами за функцией 0.5х в кубе
C++ Не понял, что от меня хотят
С помощью функции function в массиве array положите последовательность. К примеру, если n=5, то array=5, array=7, array=9 Пожалуйста объясните, что от меня хотят и как это сделать.
C++ Покритикуйте мою игру http://www.cyberforum.ru/cpp-beginners/thread988037.html
Выкладываю код своей первой игры. Она готова процентов на 90, но уже работает. Интересно узнать мнение людей, что в ней можно улучшить, упростить и т.п, т.к. на данный момент в моих глазах это идеал и верх совершенства и мне трудно судить http://www.cyberforum.ru/attachments/321188d1382724628t Кидаю с dll, если у кого не запускается из-за того, что dll не найдены Beaver.7z А так вроде...
C++ Написать программу, процедуру удаления из заданного списка, все вхождения элемента с заданным значением Написать программу, процедуру удаления из заданного списка, все вхождения элемента с заданным значением. Помогите пожалуйста!!!! подробнее

Показать сообщение отдельно
McSimov
0 / 0 / 0
Регистрация: 22.10.2013
Сообщений: 17
25.10.2013, 21:26     Нарушение прав доступа при чтении
Собственно код программы:
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
#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "string.h"
#include "stdafx.h"
#include <iostream>
 
 
struct word  //пользовательский тип с атрибутами слова в строке - координаты начала и конца и длина
{
    int b,e,l;
};
 
float dist(float a[],int i,int r) //функция вычисления расстояния
{
    float dst=0;
    int end=r;
    
    for(int j=0;j<end ;j++)
        dst+=fabs(a[i]-a[j]);
    return dst;
}
 
 
int _tmain(int argc, _TCHAR* argv[]) 
{
    
    float* a;    //объявление указателя на float
    int n;       //его размер
    float minr=0;  //минимум расстояния
    int minc=0;    //индекс самого близкого к соседям элемента
 
    char st[359];   //исходная строка
    int k=1;          //число слов в строке,изначсально с учетом последнего слова
    int* wrds;      //указатель на int
    word* arw;      //указатель на пользовательский тип
//Задание 1. Поиск элемента с наименьшим расстоянием до других
    printf("Enter number of array elms: ");  //приглашение на ввод количества элементов массива
    scanf_s("%d",  &n);
    printf("\n");                            //считывание с клавиатуры количества элементов
    a = new float[n];                        //динамическое выделение  памяти для массива n элементов
    printf("Fill your array\n");             //заполнение массива
    for(int i=0;i<n;i++)
        scanf_s("%f", &a[i]);
 
    int p=0;
    for(int i=0;i<n;i++)
        if(dist(a,i,n)<dist(a,p,n))
        {
            minr=dist(a,i,n);
            minc=i;
            p=i;
        }
 
    printf("The element # %d has the least distance. The distance is %5.2f\n", minc, minr);
    delete a;  //удаление массива
 
//Задание 2. Вывод слов строки по увеличению количества букв
    printf("Enter your string: ");             //приглашение на ввод строки
    scanf("%359s\n", st);                          //считывание с клавиатуры строки
    printf("\n");
 
    while(strlen(st)>200)                      //защита от дураков
    {
        printf(" You have broken my program \n that was awfully nice of you,try again \n");
        scanf_s("%s",st);
    }
                                                //удаление незначащих пробелов
    for(unsigned int i=0;i<strlen(st);i++)       //узнаем число слов
    {if (st[i]==' ') k++;}
 
    wrds = new int[k];                           //формируем массив, элементы которого - координаты пробелов
    int j=0;
 
    for(unsigned int i=0;i<strlen(st);i++)
        if (st[i]==' ')
        {
            wrds[j]=i;
            j++;        
        }
 
    arw = new word[k];    //массив структур с атрибутами слов
 
    arw[0].b=0;           //заполняем  массив, 1й и последнийй элементы отдельно, остальные в цикле
    arw[0].e=wrds[0]-1;
    arw[0].l=wrds[0]-1;
 
    arw[k-1].b=wrds[k-1];
    arw[k-1].e=strlen(st);
    arw[k-1].l=strlen(st)-wrds[k-1];
 
    for(int i=1;i<k-1;i++)
    {
        arw[i].b=wrds[i]+1;
        arw[i].e=wrds[i+1]-1;
        arw[i].l=arw[i].e-arw[i].b;
    }
    
 
    word buf={0,0,0};      //сортируем массив по убыванию длины слова
    for(int i=0;i<k;i++)
            for( int j=0;j<k;j++)
                if(arw[i].l<arw[j].l)
                {
                    buf.b=arw[i].b;
                    buf.e=arw[i].e;
                    buf.l=arw[i].l;
 
                    arw[i].b=arw[j].b;
                    arw[i].e=arw[j].e;
                    arw[i].l=arw[j].l;
 
                    arw[j].l=buf.b;
                    arw[j].l=buf.b;
                    arw[j].l=buf.b;
                }
 
    printf("Words sorted by decreasing order: \n");  //вывод слов строки по убыванию длины
    for(int i=0;i<k;i++)
    {
        for(int j=arw[i].b;j<arw[i].e;j++)
            printf("%c", st[j]);
        printf("\n");
    }
 
    delete wrds;
    delete arw;
    return 0;
 
}
При отладке программы, конкретнее в этом месте:
C++
1
2
3
4
5
6
for(int i=0;i<k;i++)
    {
        for(int j=arw[i].b;j<arw[i].e;j++)
            printf("%c", st[j]);
        printf("\n");
    }
Если еще конкретнее, то в этой строчке:
C++
1
printf("%c", st[j]);
Вылетает неприятная надпись следующего содержания:

Необработанное исключение в "0x008c1c07" в "лаб1.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdfac6c5".

Не могу понять, в чем дело, судя по комбинации букв и цифр, это что-то связанное с указателями, может и их разыменованием.
И если я не ошибаюсь, то обрабатывать строку как символьный массив в С++ никто не запрещает. Помогите, пожалуйста, разобраться в чем же все-таки дело.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru