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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
555shiro
8 / 8 / 1
Регистрация: 01.12.2009
Сообщений: 226
#1

Безопасный массив (массив с контролем границ) - C++

05.05.2010, 22:06. Просмотров 1300. Ответов 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
35
#include <iostream.h>
#include <stdlib.h>
class array {
int size;
char *p;
public:
array (int num)
 
~array (){delete[]p;}  // почему здесь ошибка и какая?
 
char&put(int i)
char get(int i)};
array::array (int num )
{p=new char[num];
if(!p)
{cout<<"oshibka"
exit(1);}
size=num;}
 
char & array::put(int i)
{if(i<0 ll i>=size)
{cout<<"naryshenie graniz",exit(1);}
return p[i];}
char array :: get(int i)
{if(i<0 ll i>=size)
{cout <<"oshibka v narushenii graniz",exit(1);}
return p[i];
}
int main()
{array a(10);
a.put(3)='x';
a.put(2)='r';
cout<<a.get(3)<<a.get(2)<<"\n";
a.put(11)='!';
return 0;}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2010, 22:06     Безопасный массив (массив с контролем границ)
Посмотрите здесь:

C++ Как массив разнозначных чисел превратить в массив цифр? (С++)
Как разбить массив по 3 елемента и засунуть в другой массив C++
C++ Необходимо вывести на экран первоначальный массив и полученый массив
C++ Организовать ввод целых четных значений в одномерный массив с контролем вводимых чисел
C++ Массив: Получить новый массив В по следующему правилу: В1=А1+А10
C++ Безопасный массив
Дан вещественный массив А[N]. Сформировать массив В[3] следующим образом: C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
06.05.2010, 10:38     Безопасный массив (массив с контролем границ) #2
У тебя ошибок куча,включая синтаксис и опечатки.

Там ошибка в том,что не проверяешь,можно ли вызывать delete. Если,например,просто создать локальную переменную этого типа и ничего не делать,то деструктор попытается вызвать delete для указателя,содержащего мусор.Поэтому стоит всегда занулять указатель,если он не указывает на что-то нужное, а перед вызовом delete проверять,не ноль ли ты удаляешь.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
06.05.2010, 10:46     Безопасный массив (массив с контролем границ) #3
Ошибка не именно в том месте... Она везде

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.h>
#include <stdlib.h>
class array {
int size;
char *p;
public:
array(){p=NULL;}
array(int num);
~array (){if(p)delete[]p;}  // почему здесь ошибка и какая?
 
char& put(int i);
char get(int i);
 
};
 
array::array (int num )
{
    p=new char[num];
    if(!p)
    {   cout<<"oshibka";
        exit(1);
    }
    size=num;
}
 
char & array::put(int i)
{
    if(i<0 || i>=size)
    {
        cout<<"naryshenie graniz";
        exit(1);
    }
    return p[i];
}
 
char array :: get(int i)
{
    if(i<0 || i>=size)
    {
        cout <<"oshibka v narushenii graniz";
        exit(1);
    }
    return p[i];
}
int main()
{
    array a(10);
    a.put(3)='x';
    a.put(2)='r';
    cout<<a.get(3)<<a.get(2)<<"\n";
    a.put(11)='!';
    return 0;
}
555shiro
8 / 8 / 1
Регистрация: 01.12.2009
Сообщений: 226
07.05.2010, 11:08  [ТС]     Безопасный массив (массив с контролем границ) #4
а почему когда начинаешь компилировать,экран резко исчезает? я думал он должен был вывести хотя бы что на экране... или это так и должно быть..
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
07.05.2010, 11:11     Безопасный массив (массив с контролем границ) #5
http://www.cyberforum.ru/cpp-beginners/thread10807.html
555shiro
8 / 8 / 1
Регистрация: 01.12.2009
Сообщений: 226
07.05.2010, 11:33  [ТС]     Безопасный массив (массив с контролем границ) #6
я добавил getch() и его библиотеку где она описана,всё равно также быстро исчезает...
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
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
class array {
int size;
char *p;
public:
array(){p=NULL;}
array(int num);
~array (){if(p)delete[]p;}
 
char& put(int i);
char get(int i);
 
};
 
array::array (int num )
{
        p=new char[num];
        if(!p)
        {       cout<<"oshibka";
                exit(1);
        }
        size=num;
}
 
char & array::put(int i)
{
        if(i<0 || i>=size)
        {
                cout<<"naryshenie graniz";
                exit(1);
        }
        return p[i];
}
 
char array :: get(int i)
{
        if(i<0 || i>=size)
        {
                cout <<"oshibka v narushenii graniz";
                exit(1);
        }
        return p[i];
}
int main()
{
        array a(10);
        a.put(3)='x';
        a.put(2)='r';
        cout<<a.get(3)<<a.get(2)<<"\n";
        a.put(11)='!';
        return 0;
getch ();}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2010, 21:37     Безопасный массив (массив с контролем границ)
Еще ссылки по теме:

C++ Массив чисел с контролем границ
Задан массив и матрица, получить другой массив по правилу C++
C++ Класс массив. Задания произвольных границ индексов массива
Первую половину массива P переписать в массив R, а вторую в массив Q C++
Записать в массив B длины всех серий исходного массива, а в массив C - значения элементов, образующих серии C++

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

Или воспользуйтесь поиском по форуму:
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
07.05.2010, 21:37     Безопасный массив (массив с контролем границ) #7
return 0; в main завершает выполнение твоей программы.
Т.е. getch() после ретурна бессмыслен.

C++
1
2
3
4
5
6
7
8
9
10
int main()
{
        array a(10);
        a.put(3)='x';
        a.put(2)='r';
        cout<<a.get(3)<<a.get(2)<<"\n";
        a.put(11)='!';
        getch ();
        return 0;
}
Yandex
Объявления
07.05.2010, 21:37     Безопасный массив (массив с контролем границ)
Ответ Создать тему
Опции темы

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