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

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

Восстановить пароль Регистрация
 
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 2
14.07.2014, 20:39     Нарушение прав доступа при чтении #1
Вот пишу игру морской бой, решил написать функцию, которая расставляет корабли, при это необходимо их расставлять через одну клетку друг от друга, иначе выдавала бы ошибку, мол тут поставить корабль нельзя, слишком близко к другому, написал вроде, но вылезла ошибка при запуске, нарушение прав доступа при чтении...

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

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;
*/
        // ..........................
    }
 
    // #############################
 
}
Миниатюры
Нарушение прав доступа при чтении  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2014, 20:39     Нарушение прав доступа при чтении
Посмотрите здесь:

Нарушение прав доступа при чтении C++
Нарушение прав доступа при чтении C++
C++ Нарушение прав доступа при чтении
Нарушение прав доступа при чтении C++
C++ Нарушение прав доступа при чтении
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
14.07.2014, 20:42     Нарушение прав доступа при чтении #2
Ну, например:
C++
1
string[0] - 1
если в string[0] содержится 0, то индекс будет -1
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 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;
}
olper
24 / 24 / 11
Регистрация: 02.12.2013
Сообщений: 75
14.07.2014, 20:56     Нарушение прав доступа при чтении #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
PositionShips ждет указатель, а получает массив, в котором первый элемент равен 0. и она честно пытается с этого адреса (0x00) сдернуть 16-й элемент (0x00000010).
ASCII
 Аватар для ASCII
82 / 54 / 8
Регистрация: 15.12.2013
Сообщений: 369
Завершенные тесты: 2
14.07.2014, 21:01  [ТС]     Нарушение прав доступа при чтении #5
Цитата Сообщение от olper Посмотреть сообщение
PositionShips ждет указатель, а получает массив, в котором первый элемент равен 0. и она честно пытается с этого адреса (0x00) сдернуть 16-й элемент (0x00000010).
как в таком случае исправить программу, а то что-то запутался с указателями...

Добавлено через 3 минуты
все получилось!!! Спасибо большое!
Yandex
Объявления
14.07.2014, 21:01     Нарушение прав доступа при чтении
Ответ Создать тему
Опции темы

Текущее время: 23:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru