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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
#1

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

23.01.2010, 18:13. Просмотров 831. Ответов 14
Метки нет (Все метки)

Вот это выдает:
Additional information: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
При компиле вот этой проги
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
#define _CRT_SECURE_NO_DEPRECATE
 
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
 
int main() {
 
     setlocale(LC_ALL,"Russian");
    
    // открытие файла на запись
    FILE *f;
    f = fopen( "database.txt", "wt+" );
    if( f == NULL ) {
        printf( "Не удалось создать или перезаписать 'database.txt'. Нажмите клавишу...\n" );
        _getch();
        return -1;
    }
 
    char book[50];      // название книги
    char name[20];      // фамилия
    int year;           // год издания
 
    // работа с файлом
    printf( "Создаётся база данных квитанций.\n\n" );
    while( true )  {
        printf( "Введите название книги (или 0 для выхода): " );
        scanf_s( "%49s", book, 50 );
        fflush(stdin);
 
        printf( "Фамилия автора: " );
        scanf_s( "%19s", name, 20 );
        fflush(stdin);
 
        printf( "Год издания: " );
        scanf_s("%d", year);
        fflush(stdin);
        
        fprintf( f, "%s\t%s\t%d\n", book, name, year );
 
        printf( "Информация добавлена.\n\n" );
    }
 
    // закрытие файла
    fclose(f);
    printf( "\nБаза данных квитанций 'database.txt' готова. Нажмите клавишу...\n" );
    _getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2010, 18:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка: "Попытка чтения или записи в защищенную память" (C++):

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

Ошибка : Попытка чтения или записи в защищенную память - C++
выходит ошибка после того как выполняется функция void poisk_cena(). Подскажите пожалуйста где ошибка. Ошибка: Необработанное...

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

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

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

Двумерный динамический массив. Попытка чтения или записи в защищенную память - C++
В общем функция выглядит так float** calculate(float H, float W, float L, float Vu, float Tu, float l, float ro, float T0, float C,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:16 #2
в какой строчке?
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:17  [ТС] #3
C++
1
fprintf( f, "%s\t%s\t%d\n", book, name, year );
вот тут скорее всего. Но точно я не уверенна. Я программу переписала под свою, может быть где то в другом месте.
Он в файл ничего не записывает, вот даже как лучше сказать.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:18 #4
Цитата Сообщение от Carpe Посмотреть сообщение
scanf_s("%d", year);
scanf_s("%d", &year);
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:22  [ТС] #5
Gravity, спасибо сейчас подправлю и проверю

Добавлено через 1 минуту
А теперь он зациклился. на ноль не выходит, хотя по идее должен.
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:23 #6
Цитата Сообщение от Carpe Посмотреть сообщение
А теперь он зациклился. на ноль не выходит, хотя по идее должен.
Не вижу проверки, где на 0 должен был бы быть выход.
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:27  [ТС] #7
Не вставила, прошу прощение.
C++
1
2
3
4
5
6
7
8
while( true )  {
        printf( "Введите название книги (или 0 для выхода): " );
        scanf_s( "%49s", book, 50 );
        fflush(stdin);
        if( book==0 ) break;
        printf( "Фамилия автора: " );
        scanf_s( "%19s", name, 20 );
        fflush(stdin);
Понимаю, что book у меня символьная, но при переписывании на символы выдает что метка не определена
Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:27 #8
while выполняется пока выражение в скобках равно true
а у тебя while(true)
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:29  [ТС] #9
Mr.Loner, немного не поняла?
Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 18:30 #10
Цитата Сообщение от Carpe Посмотреть сообщение
Понимаю, что book у меня символьная, но при переписывании на символы выдает что метка не определена
тогда так
book[0]=='0'
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:30 #11
Цитата Сообщение от Carpe Посмотреть сообщение
if( book==0 ) break;
Строки не так сравнивают. Вот пример:
C
1
2
if(strcmp(book, "0") == 0)    /* если book равно "0" */
    break;
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:37  [ТС] #12
Цитата Сообщение от Gravity Посмотреть сообщение
strcmp[/C]
Поясните, пожалуйста, что за оператор.

Добавлено через 1 минуту
Mr.Loner, спасибо все работает
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
23.01.2010, 18:37 #13
Цитата Сообщение от Carpe Посмотреть сообщение
Поясните, пожалуйста, что за оператор.
Код
НАЗВАНИЕ
       strcmp, strncmp - сравнение двух строк

СИНТАКСИС
       #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);

ОПИСАНИЕ
       Функция  strcmp()  сравнивает две строки s1 и s2.  Она возвращает целое
       число, меньшее, равное,  или  больше  нуля,  если  s1,  соответственно,
       меньше, равна, или больше чем s2.

       Функция strncmp() работает похожим образом, но сравнивает только первые
       n символов строки s1.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
       Функции strcmp() и strncmp() возвращают целое число,  меньшее,  равное,
       или больше нуля, если строка s1 (или ее первые n байт), соответственно,
       меньше, равна, или больше s2.
Carpe
0 / 0 / 0
Регистрация: 22.12.2009
Сообщений: 45
23.01.2010, 18:52  [ТС] #14
Gravity, спасибо

Добавлено через 13 минут
Тут другая проблема появилась. Если название книги состоит из двух слов, то он записывает только первое из них а второе "летит в трубу". Что с этим делать не подскажите?
Mr.Loner
42 / 42 / 4
Регистрация: 23.01.2010
Сообщений: 152
23.01.2010, 20:08 #15
C++
1
2
3
4
#include<iostream>
const int max_size=256;
 
cin.getline(str,max_size,'\n');
Добавлено через 9 минут
И еще. По поводу сравнения строки. Пиши лучше как Gravity сказал.

C++
1
2
if(strcmp(book, "0") == 0)
    break;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2010, 20:08
Привет! Вот еще темы с ответами:

Ошибка "Попытка чтения в запрещенную память" при работе с файлами - C++
Нужно хранить в файле данные со структуры и считывать их. Перепробовал кучу вариантов (fopen и ofstream/ifstream), постоянно одна и та же...

Структура / Попытка записи в защищенную память - C++
Доброго времени суток. Смотрите, есть следующий код: struct NewsInfo { int ID; char text; int typepost = -1; }; ...

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") - C++
Описать структуру с именем &quot;ORDER&quot;, содержащий следующие поля: &quot;Счет плательщика&quot;; &quot;Счет получателя&quot;; &quot;Сумма, переводится банковской...

Необработанное исключение в "0x013f2b22" в "123.exe": 0xC0000005: Нарушение прав доступа при записи "0xfdfdfdfd" - C++
Вот функция для удаления столбца: #pragma once #include &lt;iostream&gt; using namespace std; int **DeleteIndexCol(int **ar,int s1,int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
23.01.2010, 20:08
Ответ Создать тему
Опции темы

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