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

Выход за диапозон... - C++

Восстановить пароль Регистрация
 
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.12.2009, 22:57     Выход за диапозон... #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
#include <iostream>
#include <algorithm>
#include <numeric>
#include <time.h>
using namespace std;
//////////////////////////////////////////////////////
void out(int *a,int n,int k);
void vin(int *a,int n);
void prod(int *a,int n,int k);
//////////////////////////////////////////////////////
int main()
{
    system("chcp 1251");
    int n=3,k=5;
    /*cout << "Введите количество строк: ";
    cin >> n;
    cout << "Введите количество столбцов: ";
    cin >> k;
    int *arr = new int[n*k];*/
    //int zero[2] = {0, 0};
    int arr[] = {0, 3, 3, 0, 1,
                        2, 0, 6, 1, 0,
                        1, 0, 10, 0, 2};
    //vin(arr,n*k);
    cout << "Массив:" << endl;
    out(arr,n,k);
    cout << "Произведения:" << endl;
    prod(arr,n,k);
    /*prod = accumulate(find_first_of(arr,arr+n,zero,zero+1)+1,
                        find_end(arr,arr+n,zero,zero+1),
                        1,
                        multiplies<int>());
    cout << prod << endl;
    cout << *(find_first_of(arr,arr+n,zero,zero+1)+1)<< endl;
    cout << *(find_end(arr,arr+n,zero,zero+1)-1) << endl;*/
    getchar();
    return 0;
}
////////////////////////////////////////////////////////////
void out(int *a,int n, int k)
{
    int x = k-1;
    for(int i = 0; i < n*k;++i)
    {
        cout << a[i] << "  ";
        if(i == x)
        {
            cout << endl;
            x += k;
        }
    }
}
//------------------------------------------------------------
void vin(int *a,int n)
{
    srand(time(NULL));
    for(int i = 0; i < n; ++i)
        a[i] = rand()%10-5;
}
//-------------------------------------------------------------
void prod(int *a,int n,int k)
{
    int zero[2] = {0, 0};
    int x = k, i = 1;
    for(int i = 0; i < n; ++i)
    {
        cout << accumulate(find_first_of(a+i*x,a+(i+1)*x-1,zero,zero+1)+1,
                        find_end(a+i*x,a+(i+1)*x-1,zero,zero+1),
                        1,
                        multiplies<int>()) << endl;
    }
    /*for(int i = 0; i < n;++i)
    {
        cout << *(find_first_of(a+i*x,a+(i+1)*x-1,zero,zero+1)+1) << "  ";
        cout << *find_end(a+i*x,a+(i+1)*x-1,zero,zero+1) << endl;
        //cout << *(a+i*x) << "  " << *(a+(i+1)*x-1) << endl;
    }*/
}
при исполнение в 67 строке вылетает ошибка о неверном обращении к неверному адресу

Выход за диапозон...

Что нужно изменить. чтобы заработало..?

ЗЫЖ для теста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.12.2009, 22:57     Выход за диапозон...
Посмотрите здесь:

Выход из <do-while> C++
Выход из цикла C++
C++ Выход из условия
Задать диапозон чисел для ввода C++
C++ выход из программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
20.12.2009, 23:05     Выход за диапозон... #2
при чтении данных (инициализация переменной, или копирование или еще что нить) была попатка прочитать информацию за пределами памяти определенной ОС под данный процесс. вощем какой-то указатель, по которому осуществляется чтение, "не туда" смотрит - за предлы выделенной памяти. это логическая ошибка.
например:
C++
1
2
char *p=0;
cin >> p;
будет таже ошибка только при попытке записи.
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.12.2009, 23:34  [ТС]     Выход за диапозон... #3
А где в моем коде это? И как исправить?
KrTaras
12 / 12 / 1
Регистрация: 09.09.2009
Сообщений: 35
20.12.2009, 23:45     Выход за диапозон... #4
твоя програма должна искать произведения строк(не нулевих елементов)?
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
20.12.2009, 23:57  [ТС]     Выход за диапозон... #5
Цитата Сообщение от KrTaras Посмотреть сообщение
твоя програма должна искать произведения строк(не нулевих елементов)?
Да. Произведение элементов строки, которые стоят между первым и последним нулями.
KrTaras
12 / 12 / 1
Регистрация: 09.09.2009
Сообщений: 35
21.12.2009, 00:46     Выход за диапозон... #6
я тут написал примитивной код может падайдьот
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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int mas[3][5] = {0, 3, 3, 0, 1,
                     2, 0, 6, 1, 0,
                     1, 0, 10,0, 2};
     int P=1,l=2;
     for(int i=0; i<3; i++)
     {
        bool k=false;
        P=1; l=2;
        for(int j=0; j<5; j++)
          {
             if(mas[i][j]==0 && l>0)
             {
               k=true;
               l--;
             }
             else
             {
                 if(k==true)
                 {
                    P=P*mas[i][j];
                 }
             }  
             if(l==0)
               k=false;
          }
         cout<<P<<endl;       
     }
    getch();
}
Добавлено через 2 минуты
принайме невилетает))) виводит
9
6
10

Добавлено через 12 минут
я тут немного оновил) наслучей если вариант такой что между первим и последним нулем есть ище нуль например
{0, 3, 3, 0, 1,__или___{0, 3, 3, 0, 1,
_2, 0, 6, 1, 0,_________2, 0, 6, 1, 0,
_0, 0, 0, 2, 0}_вот тут_0, 1, 0, 2, 0}
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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int mas[3][5] = {0, 3, 3, 0, 1,
                     2, 0, 6, 1, 0,
                     0, 1, 0,2, 0};
     for(int i=0; i<3; i++)
     {
        bool k=false;
        int P=1, l=2, m=0;
        for(int j=0; j<5; j++)
          {
             if(mas[i][j]==0)
             {
               if(l!=0)
               {
                 k=true;
                 l--;
               }
               m++;
             }
             else
             {
                 if(k==true)
                 {
                    P=P*mas[i][j];
                 }
             }  
             if(l==0)
               k=false;
             if(m>2)
               P=0;
          }
         cout<<P<<endl;       
     }
    getch();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2009, 01:11     Выход за диапозон...
Еще ссылки по теме:

Выход из программы C++
Выход из лабиринта C++
Выход из switch C++

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

Или воспользуйтесь поиском по форуму:
insolent
 Аватар для insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
21.12.2009, 01:11  [ТС]     Выход за диапозон... #7
KrTaras, ты молодец, что написал код, но он мне не нужен: я начинаю учить STL, и мненя интересует, почему мой код не хочет исправно работать...(((
Yandex
Объявления
21.12.2009, 01:11     Выход за диапозон...
Ответ Создать тему

Метки
адрес, массив
Опции темы

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