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

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

Войти
Регистрация
Восстановить пароль
 
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
#1

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

14.07.2014, 20:39. Просмотров 512. Ответов 4
Метки нет (Все метки)

Вот пишу игру морской бой, решил написать функцию, которая расставляет корабли, при это необходимо их расставлять через одну клетку друг от друга, иначе выдавала бы ошибку, мол тут поставить корабль нельзя, слишком близко к другому, написал вроде, но вылезла ошибка при запуске, нарушение прав доступа при чтении...

Скрин сделал вложением.

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
#include <stdio.h>
#include <stdlib.h>
#include "data.h"
 
 
int PositionShips(int string[4], int column[4], int *Arr[10])
{
    register int i, freeCell, lenShip;
 
    // Если корабль однопалубный
 
    if( !column[1] && !string[1] )
    {
        if( !Arr[string[0] - 1][column[0] - 1] )
            Arr[(string[0] - 1)][(column[0] - 1 )] = 1;
 
        // Выставляем запретную зону для расстановки кораблей вблизи только что установленного.
        
        /*for( i = 2; i > 0; i-- )
            for( freeCell = 2; freeCell > 0; freeCell-- )
                if( Arr[( string[0] - i )][(column[0] - freeCell)] != 1 )
                    Arr[( string[0] - i )][(column[0] - freeCell)] = -1;
*/
        // ..........................
    }
 
    // #############################
 
    // Если корабль вертикальный
 
    if( column[0] && !column[1] )
    {
        // Проверка длины корабля
 
        lenShip = 0;
        while(string[lenShip]) lenShip++;
 
        for( i = 0, freeCell = 0; i < 4; i++ )
        {
            if( !Arr[ ( string[i] - 1 ) ][ ( column[0] - 1 ) ] ) freeCell++;
        }
 
        if( freeCell == lenShip)
        {
            for( i = 0; i < 4; i++ ) Arr[ ( string[i] - 1 ) ][ ( column[0] - 1 ) ] = 1;
            return 1;
        }
        else
            return -1;
 
        // Выставляем запретную зону для расстановки кораблей вблизи только что установленного.
 
        /*for( i = lenShip + 2; i > 0; i-- )
            for( freeCell = 2; freeCell > 0; freeCell-- )
                if( Arr[( string[0] - i )][(column[0] - freeCell)] != 1 )
                    Arr[( string[0] - i )][(column[0] - freeCell)] = -1;
                    */
        // ..........................
    }
 
    // #############################
 
 
    // Если корабль горизонтальный
 
    if( string[0] && !string[1] )
    {
        lenShip = 0;
        while(column[lenShip]) lenShip++;
 
        for( i = 0, freeCell = 0; i < 4; i++ )
        {
            if( !Arr[ ( string[0] - 1 ) ][ ( column[i] - 1 ) ] ) freeCell++;
        }
 
        if( freeCell == lenShip)
        {
            for( i = 0; i < 4; i++ ) Arr[ ( string[0] - 1 ) ][ ( column[i] - 1 ) ] = 1;
            return 1;
        }
        else
            return -1;
 
        // Выставляем запретную зону для расстановки кораблей вблизи только что установленного.
 
        /*for( i = 2; i > 0; i-- )
            for( freeCell = lenShip + 2; freeCell > 0; freeCell-- )
                if( Arr[( string[0] - i )][(column[0] - freeCell)] != 1 )
                    Arr[( string[0] - i )][(column[0] - freeCell)] = -1;
*/
        // ..........................
    }
 
    // #############################
 
}
0
Миниатюры
Нарушение прав доступа при чтении  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2014, 20:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нарушение прав доступа при чтении (C++):

Нарушение прав доступа при чтении - C++
// ConsoleApplication6.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &quot;stdafx.h&quot; ...

Нарушение прав доступа при чтении - C++
Собственно код программы: #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include &quot;string.h&quot; #include &quot;stdafx.h&quot; ...

Нарушение прав доступа при чтении - C++
Здравствуйте! На строке catalog-&gt;push_back(*record); Выдает ошибку: Первый этап обработки исключения в &quot;0x00173589&quot; в &quot;Traning2.exe&quot;:...

Нарушение прав доступа при чтении - C++
Добрый день при выполнении программы выходит ошибка: Необработанное исключение в &quot;0x00ce4893&quot; в &quot;Diskret.exe&quot;: 0xC0000005: Нарушение прав...

Нарушение прав доступа при чтении - C++
Здравствуйте,реквестирую помощь,я уже волосы на голове рву в попытке решить эту проблему,при чтении из бинарного файла выводит...

Нарушение прав доступа при чтении - C++
Здравствуйте. Собственно проблема вот в чем при вызове функции нахождения определителя выскакивает ошибка Необработанное исключение в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Эксперт CЭксперт С++
13213 / 7484 / 843
Регистрация: 27.09.2012
Сообщений: 18,395
Записей в блоге: 3
Завершенные тесты: 1
14.07.2014, 20:42 #2
Ну, например:
C++
1
string[0] - 1
если в string[0] содержится 0, то индекс будет -1
1
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
14.07.2014, 20:43  [ТС] #3
а я еще сервер собирался писать, да графику со звуками добавлять, а тут такие ошибки не могу исправить...

Добавлено через 56 секунд
Croessmah,
вот отрывок кода, который вызывает эту функцию, так хотел посмотреть ее работоспособность:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdlib.h>
#include <stdio.h>
#include "data.h"
 
int main()
{
 
    int st[4] = {5, 0, 0, 0}, pp[4] = {5, 0, 0, 0}, tt[100] = {0};
    int i;
    
    
    PositionShips(st, pp, tt);
    for(i = 0; i < 100; i++)
    {
        printf(" %d ", tt[i]);
        if(i == 10)
            printf("\n");
    }
 
    system("pause >> void");
    return 0;
}
0
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
14.07.2014, 20:56 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
PositionShips ждет указатель, а получает массив, в котором первый элемент равен 0. и она честно пытается с этого адреса (0x00) сдернуть 16-й элемент (0x00000010).
1
ASCII
90 / 62 / 10
Регистрация: 15.12.2013
Сообщений: 399
Завершенные тесты: 2
14.07.2014, 21:01  [ТС] #5
Цитата Сообщение от olper Посмотреть сообщение
PositionShips ждет указатель, а получает массив, в котором первый элемент равен 0. и она честно пытается с этого адреса (0x00) сдернуть 16-й элемент (0x00000010).
как в таком случае исправить программу, а то что-то запутался с указателями...

Добавлено через 3 минуты
все получилось!!! Спасибо большое!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2014, 21:01
Привет! Вот еще темы с ответами:

Нарушение прав доступа при чтении - C++
Имею функцию такого плана: void RenameOldLabels() { USES_CONVERSION; string path, pathAfterRename, pathToDelFile, pathToDelDir,...

Нарушение прав доступа при чтении.Отладка - C++
Здравствуйте. Не работает код,отладка показала&quot;необработаное исключение&quot;...&quot;нарушение прав доступа при чтении&quot;.Буду признателен за любую...

0xC0000005: Нарушение прав доступа при чтении - C++
доброго времени суток. Имеем код: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; using namespace std; //C=A*42+B...

Нарушение прав доступа при чтении по адресу - C++
Использую библиотеку SFML мне нужно подключить спрайт, но возникает такая ошибка. Кто может помочь?


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

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

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