Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 18
1

Выход за предел массива

01.08.2012, 03:18. Просмотров 3166. Ответов 14
Метки нет (Все метки)

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

Я бы хотел узнать возможно ли это ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2012, 03:18
Ответы с готовыми решениями:

Выход переменной з предел значения
Необходимо написать программу, в которой осуществляется выход переменной за пределы значения и при...

Выход за границы массива
#include <iostream> #include <algorithm> using namespace std; void umnozh(int** arr, int n,int...

Выход за границы массива
Выхожу за пределы массива, но вот только не понимаю как. #include <iostream> #include <fstream> ...

Выход за пределы массива
#include <assert.h> #include <assert.h> #include <string.h> #include <stdint.h> #include...

14
Эксперт С++
8323 / 6076 / 603
Регистрация: 10.12.2010
Сообщений: 28,206
Записей в блоге: 27
01.08.2012, 03:54 2
Вполне...
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
01.08.2012, 04:53 3
C
1
strcpy ((char*)0x1234, "hello world!");
а вы про границы массива..
0
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
02.08.2012, 01:06 4
int mas[]=new mas[9]
int *p=&mas;


for (int i=0; i<10; i++)
cout<<*(p+i);

точно за пределы выйдете
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.08.2012, 01:10 5
Цитата Сообщение от Ne0nX Посмотреть сообщение
Здравствуйте, меня заинтересовала одна особенность массивов, а именно то что они не проверяются на количество элементов, из этого исходит то что с их помошью мы можем изменить/инициализировать совершенно не относящуюся к этому массиву переменную.

Я бы хотел узнать возможно ли это ?
а в принципе возможно и такое:

C++
1
2
3
4
class ClassA;
...
ClassA *pClA = NULL;
pClA->method0 ();
и никто не проверяет, инициализирован ли указатель!
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2012, 01:16 6
Цитата Сообщение от just_dude Посмотреть сообщение
int mas[]=new mas[9]
int *p=&mas;
Это какой компилятор такое принимает?
1
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
02.08.2012, 10:27 7
Добавлено через 52 секунды
Цитата Сообщение от alsav22 Посмотреть сообщение
Это какой компилятор такое принимает?
извините


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include "iostream"
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *mas=new int[8];
 
    for (int i=0; i<9; i++)
        *(mas+i)=i;
 
    for (int i=0; i<11; i++)
        cout<<*(mas+i)<<endl;
    
    char b;
    cin>>b;
    delete[] mas;
    return 0;
}
0
9 / 9 / 0
Регистрация: 19.02.2012
Сообщений: 32
02.08.2012, 12:33 8
У вас же есть STL и векторы, а вы исполььзуете голые C-массивы....
Используйте
C++
1
std::vector<T>
и ни о чём не думайте!
0
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
02.08.2012, 12:36 9
Цитата Сообщение от Dem0Men Посмотреть сообщение
У вас же есть STL и векторы, а вы исполььзуете голые C-массивы....
Используйте
C++
1
std::vector<T>
и ни о чём не думайте!
с++ всё сделает за Вас
0
Эксперт С++
8323 / 6076 / 603
Регистрация: 10.12.2010
Сообщений: 28,206
Записей в блоге: 27
02.08.2012, 12:40 10
с++ всё сделает за Вас
И даже внесет в код ошибки

just_dude читайте про STL ( обратите внимание на случаи невалидности итераторов и перераспределение памяти в vector-е)
0
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
02.08.2012, 13:36 11
Avazart, хорошо,спасибо
0
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 18
02.08.2012, 18:24  [ТС] 12
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
#include <iostream>
#include <conio.h>
using namespace std;
 
void Create (int&,int*);
bool keyboard (int&,int&);
 
void main () {
    int mass[5] = { 1,2,3,4,5 };
    int abc = 5;
 
    setlocale(0,"rus");
 
    Create(abc,mass);
}
 
void Create (int &abc,int *mass) {
    int link = 0;
    bool dowhile = true;
    do {
        system("cls");
        cout<<"Наша переменная: "<<abc<<" Ее адрес: "<<&abc<<endl;
 
        cout<<"\nЯчейка массива: mass["<<link<<"]\n"
            <<"Данные: "<<mass[link]<<endl
            <<"Адрес: "<<&mass+link<<endl;
 
        dowhile = keyboard (link,mass[link]);
    }
    while (dowhile);
}
 
bool keyboard (int &link,int&eq) {
    int per = _getch();
    switch (per) {
        case 13: return false;
            break;
        case 224: 
            {
                per = _getch();
                switch (per) {
                    case 75: link--;
                        break;
                    case 77: link++;
                        break;
                }
            }
            break;
        case 53: cout<<"Измените переменную: ";cin>>eq;
            break;
    }
    return true;
}
Вот накидал код но переменную он не меняет =((
0
Эксперт С++
8323 / 6076 / 603
Регистрация: 10.12.2010
Сообщений: 28,206
Записей в блоге: 27
02.08.2012, 18:28 13
Про какую перемнную речь?
0
0 / 0 / 0
Регистрация: 10.06.2012
Сообщений: 18
02.08.2012, 20:12  [ТС] 14
Возможно написал бред выше но с помощью данной программы мы должны находить адрес переменной abc и изменять ее по адресу

Добавлено через 1 час 28 минут
Все разобрался, благодарю всем кто участвовал.

Кому интересно, у меня ошибка в 27 строке вместо &mass+link. mass+link или &mass[link]
0
7 / 11 / 0
Регистрация: 01.08.2012
Сообщений: 99
15.10.2012, 18:17 15
Что будет, если в унитаз поезда на полном ходу бросить лом?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2012, 18:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выход за пределы массива
Где-то здесь происходит выход за пределы массива puti, но я не могу его найти уже второй день....

Выход за рамки массива
Всем добра! Допустим есть массив: int a={0,0,0,0,0,0,0,0} То почему если мы выведем...

Выход за пределы массива
Столкнулся со следующей проблемой. Ввожу по формату: Мой код при выполнении выдаёт ошибку. Выход...

Выход за рамки массива
Здравствуйте. Подскажите, пожалуйста, как такое, вообще может быть. Написал программу. ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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