Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/79: Рейтинг темы: голосов - 79, средняя оценка - 4.54
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110

Ошибка : Попытка чтения или записи в защищенную память

28.10.2012, 18:12. Показов 16091. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
выходит ошибка после того как выполняется функция void poisk_cena(). Подскажите пожалуйста где ошибка.
Ошибка:
Необработанное исключение типа "System.AccessViolationException" произошло в kurs_9.exe
Дополнительные сведения: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
код:
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
// kurs_9_2.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <atlstr.h>
#include <string>
 
#include <stdio.h>
#include <stdlib.h>
 
 
using namespace System;
using namespace std;
 
//**********
 
int t; // кол dvd дисков
bool est=false; // имеется ли БД дисков 
 
struct dvd //структура dvd диска 
{
string namefilm;//название фильма
string namereg;// имя режисера
int prodol; // продолжительность в минутах
int cena; // цена
};
 
 
void addvd() // добавление дисков
{   
 
    cout<<"Вводите только латиницей(английскими)\n";
    cout<<"Количество dvd дисков = "; 
    cin>>t;
dvd *p1 = new dvd[t];
 //запись в файл
 fstream f("f.dat", ios::out);
    for(int i=0; i<t; i++)
 {  cout<<"\nназвание фильма: ";           cin>>p1[i].namefilm;   f<<p1[i].namefilm<<" ";
    cout<<"имя режисера: ";                cin>>p1[i].namereg;    f<<p1[i].namereg<<" ";
    cout<<"продолжительность в минутах: "; cin>>p1[i].prodol;     f<<p1[i].prodol<<" ";
    cout<<"цена: ";                        cin>>p1[i].cena;       f<<p1[i].cena<<"\n";
  }
 f.close();//закрытие потока
 delete [] p1;
 est=true;
}
 
 
void print()//вывести на экран
{ if (est){ 
dvd *p1 = new dvd[t];
cout<<"\n";
fstream f("f.dat", ios::in);
for(int i = 0; i<t; i++)
{  
    cout<<"    Диск: "<<i+1<<endl;
    f >> p1[i].namefilm; cout<<"Название фильма: "<<p1[i].namefilm<<endl;
    f >> p1[i].namereg; cout<<"Имя режисера: "<<p1[i].namereg<<endl;
    f >> p1[i].prodol; cout<<"Продолжительность: "<<p1[i].prodol<<endl;
    f >> p1[i].cena; cout<<"Цена: "<<p1[i].cena<<"\n\n";
    
}
f.close();
delete [] p1;}
else {cout<<"\nОшибка! Нет дисков\n";}
}
 
//*********
void poisk_cena(){
if (est){ 
dvd *p1 = new dvd[t];
int rub;
cout<<"Задайте цену: ";
cin>>rub;
//*******
int m; 
dvd *p2 = new dvd[];// сюда сохр отсортированные диски
int e = 0; // количество оставшихся дисков
//*********
 
fstream f("f.dat", ios::in);
for(int i = 0 , m = 0 ; i<t; i++) // тут выводит ошибку после первой итерации 
{  
    f >> p1[i].namefilm; 
    f >> p1[i].namereg;
    f >> p1[i].prodol;
    f >> p1[i].cena;
    if (p1[i].cena<rub){
        cout<<"       Диск: "<<i+1<<"\n";
 
        cout<<"Название фильма: "<<p1[i].namefilm<<"\n";  
        cout<<"Имя режиссера: "<<p1[i].namereg<<"\n";       
        cout<<"Продолжительность: "<<p1[i].prodol<<"\n";   
        cout<<"Цена: "<<p1[i].cena<<"\n\n";                 
        // присвоение
        p2[m].namefilm = p1[i].namefilm;
        p2[m].namereg  = p1[i].namereg;
        p2[m].prodol   = p1[i].prodol;
        p2[m].cena     = p1[i].cena;
    
    //memcpy( &p2[m], &p1[i], sizeof(struct dvd)); // присвоение всей структуры
    m++;
    e++;
    }
}
 
for(int m ; m<e; m++)
{   cout<<"-------------------------\n";
    cout<<"Название фильма: "<<p2[m].namefilm<<endl;
    cout<<"Имя режисера: "<<p2[m].namereg<<endl;
    cout<<"Продолжительность: "<<p2[m].prodol<<endl;
    cout<<"Цена: "<<p2[m].cena<<"\n\n";
}
 
f.close(); 
// запись результата в файл
fstream fs("f.dat", ios::out);
for(int m ; m<e; m++)
{
fs << p2[m].namefilm << " ";
fs << p2[m].namereg << " ";
fs << p2[m].prodol << " ";
fs << p2[m].cena << "\n";
}
fs.close(); delete [] p2; delete [] p1; 
}
else {cout<<"\nОшибка! Нет дисков\n";}
 
}
//*******  ГЛАВНАЯ ***************
int main()
{
    setlocale(LC_ALL,"Russian"); // подключение русского языка
    int k; // меню
     
    do{
    cout<<"1. Создать БД дисков\n";
    cout<<"2. Вывести данные\n";
    cout<<"3. Удалить с ценой выше чем...\n";
    cout<<"4. Выход\n";
    cin>>k;
    switch(k){
    case 1: addvd(); break;
    case 2: print(); break;
    case 3: poisk_cena(); break;
    }} while(k!=4);
 
    system("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.10.2012, 18:12
Ответы с готовыми решениями:

System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 2
В предыдущей теме некто вообразил, что код зацикливается, поэтому приходится выкладывать более широкую модель. Надеюсь, до целого проекта...

System.AccessViolationException: Попытка чтения или записи в защищенную память - попытка 3
Уже простите за некомпилируемый код, просто я переустановил Windows, и Visual Studio удалилась, только сегодня днем установил. Код там...

Попытка чтения или записи в защищенную память
Здравствуйте. Вот такая проблема. При компиляции программы выводит сообщение: An unhandled exception of type...

27
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 18:50
C++
1
dvd *p2 = new dvd[];// сюда сохр отсортированные диски
А что? размер тут не указан?
0
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
28.10.2012, 18:58  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А что? размер тут не указан?
Если укажу то все равно такая ошибка пишет.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 19:11
так почему б не указать и продолжить искать ошибку?
0
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
28.10.2012, 19:17  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
так почему б не указать и продолжить искать ошибку?
так ошибка точна такая же появляется
скриншот http://s1.ipicture.ru/uploads/... T5BlLu.png
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 19:25
и почему у тебя каждый раз выделяется дин.массив, читается из файла, и удаляется? Думаю ошибка связана с тем, что ты и сам запутался в этих new/delete и где-то удалил невыделенную/освобождённую память.

Добавлено через 6 минут
короче, начни с простого. Прочитай из файла в массив эти данные. Поставь точку останова и проверь, правильно ли считался массив.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 19:29
Значение t где задано?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 19:35
Запустил прогу.
О! И самый главный вопрос. Зачем ты заставляешь меня каждый раз вводить новый массив дисков? Он же в файле сохраняется после первого запуска!!! est не должно быть всегда равно false
Значение t где задано?
Проблема из той же серии. Оно вводится пользователем при создании новой базы дисков. Вообще невозможно прочитать эту базу из файла. Только заставить юзера ввести новые кол-во дисков, их содержание, и только потом работать. А файл тут вообще просто рядом стоит и постоянно загружается/выгружается.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 19:44
Чтение структуры из файла
Структура выводит мусор

Увидел.
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 19:48
Цитата Сообщение от alsav22 Посмотреть сообщение
чтение структуры из файла
Структура выводит мусор
В том то и дело, что как читать файл он знает и при этом производит следующее.
ТРЕБУЕТ ввести массив с клавы вне зависимости от наличия файла.
Сохраняет его в файле, удаляет массив из памяти
При вызове функции удаления элемента
снова выделяет память под массив,
читает файл
выделяет память под второй массив,
копирует в него искомые данные
копирует данные из массива в файл
удаляет массив из памяти.
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 19:55
C++
1
for(int m ; m < e; m++)
А значение m где?

Добавлено через 2 минуты
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
В том то и дело, что как читать файл он знает
Знать может и знает, но динамический массив нулевого размера объявляет с настойчивостью, достойной лучшего применения.
0
26 / 26 / 3
Регистрация: 20.09.2011
Сообщений: 68
28.10.2012, 19:57
alsav22 правильно спросил, где задан t?
t задается только в addvd. то есть если я всю программу пройду по меню от первого до последнего то может и отработает нормально, но если после запуска программы я сразу же выберу пункт 3, то в t будет в лучшем случае 0. или мусор, что скорее всего. от сюда и ошибка. добавь в poisk_cena проверку на корректность t. ну и выведи её перед циклом. увидишь какая ерунда там хранится. то же самое и m. тоже мусор там лежит.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
28.10.2012, 20:01
Цитата Сообщение от kertio Посмотреть сообщение
но если после запуска программы я сразу же выберу пункт 3
Если ты его выберешь, тог программа просто скажет, что файла не существует, вне зависимости от его наличия.
Потому что переменная est тоже задается только в addvd.
Никакой ошибки.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 20:04
Цитата Сообщение от kertio Посмотреть сообщение
но если после запуска программы я сразу же выберу пункт 3
Это он через значене est обходит, а вот с m - ошибка.
1
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
28.10.2012, 20:05  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Значение t где задано?
Она объявлена как глобальная перед структурой

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Запустил прогу.
О! И самый главный вопрос. Зачем ты заставляешь меня каждый раз вводить новый массив дисков? Он же в файле сохраняется после первого запуска!!! est не должно быть всегда равно false
Я так сделал потому что не знаю как определить потом есть ли БД дисков и сколько в нем записано дисков.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 20:11
Если m в циклах задать и dvd *p2 = new dvd[t], ошибки нет, но муссор выводит при "Удалить с ценой выше чем..."
0
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
28.10.2012, 20:14  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
А значение m где?
79 строка - объявление
85 - присвоение 0
105 - прибавление на 1 диск

Цитата Сообщение от kertio Посмотреть сообщение
t задается только в addvd
А как присвоить его в addvd чтобы потом его другие функции тоже видели, как то через указатель?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 20:22
Цитата Сообщение от иван_пропал Посмотреть сообщение
79 строка - объявление
Я разве про объявление спросил? Переменная m, объявленная в 79 строке, вообще, нигде не используется. В циклах вы объявляете уже другие переменные с тем же именем, а значения не задаёте (110, 121)
0
36 / 0 / 1
Регистрация: 05.10.2012
Сообщений: 110
28.10.2012, 20:28  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
а значение не задаёте.
а развет int m = 0 не задает значение 0 ?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.10.2012, 20:29
110, 121.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2012, 20:29
Помогаю со студенческими работами здесь

Попытка чтения или записи в защищенную память
собственно в проблема в заголовке #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void...

Попытка чтения или записи в защищенную память
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена. P.S. не ругайтесь...

Ошибка: "Попытка чтения или записи в защищенную память"
Вот это выдает: Additional information: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память...

System.AccessViolationException: Попытка чтения или записи в защищенную память
Такой вопрос. Я сделал обмен информацией между классами по совету TRam_: При попытке вызвать gn() компиляция проходит нормально, но во...

Динамический массив структур - ошибка "попытка чтения или записи в защищенную память"
не работает: class Students { struct list { string marka_mashini; string familiya_vladelca; int god_vipuska; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru