Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 28.09.2011
Сообщений: 26
.NET 4.x

Создал динамический массив, при заполнении ошибка

20.10.2011, 13:16. Показов 1845. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создал динамический массив, при заполнении ошибка, почему?

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
//создать динамический массива с использованием свойств и индексаторов
 
using System;
 
class ArrayTrain {
 
    int[] Array;
 
    public ArrayTrain(int ArLength)
    {
        Array = new int[ArLength];
    }
    
    //Свойство
    public int ArrayLength
    {
        get 
        {
            return Array.Length;
        }
        set 
        {
            if (ok(value))
            {
                int[] NewArray = new int[value];
                Array.CopyTo(NewArray, 0);
                Array = NewArray;
                //Array = new int[value];
                //NewArray.CopyTo(Array, 0);
            }
        }
    }
 
    bool ok(int index)
    {
        if ((index > 0) && (index < Array.Length))
            return true;
        else return false;
    }
 
    //Индексатор
    public int this[int index]
    {
        get
        {
            if (ok(index))
            return Array[index];
            else return 0;
        }
 
        set
        {
            //if (ok(index))
                Array[index] = value;
        }
    }
}
 
class UsingDinamicArray
{
    static void Main() {
 
        //Создать объект
        ArrayTrain obj = new ArrayTrain(10);
 
        //заполнить объект данными
        for (int i = 0; i < 10; i++)
            obj[i] = i;
 
        //вывести данные объекта
        Console.WriteLine("Данные до расширения динамического массива:");
        for (int i = 0; i < 10; i++)
            Console.WriteLine(obj[i]);
 
        //расширить массив
        obj.ArrayLength = 15;
 
        //заполнить объект данными
        for (int i = 0; i < 15; i++)
            obj[i] = i;
 
        //вывести данные объекта
        Console.WriteLine("Данные после расширения динамического массива:");
        for (int i = 0; i < 15; i++)
            Console.WriteLine(obj[i]);
        
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.10.2011, 13:16
Ответы с готовыми решениями:

Двумерный динамический массив, нарушение прав доступа при заполнении с клавиатуры
при заполнении массива с клавиатуры возникает аварийное завершение программы: Необработанное исключение по адресу 0x5470E541...

Ошибка при заполнении таблицы через массив
Приветствую вас. Можете подсказать как исправить ошибку? При попытке заполнить таблицу выходит следующее сообщение: Ссылка на объект не...

Динамический массив при наследовании, элементами которого являются объекты класса наследника динамический массив
Попробовал создать динамический массив, у которого элементы - объекты класса динамический массив, причем использовал класс-наследник от...

7
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
20.10.2011, 13:23
ОМГ. Тэги форматирования уже не в моде? В качестве динамического массива можно использовать List - без вот этих плясок с бубном.

ЗЫ: Кстати этот код демонстрирует всего лишь обертку над статическим массивом. Изменить его размер в процессе выполнения нельзя.
0
2 / 2 / 0
Регистрация: 28.09.2011
Сообщений: 26
20.10.2011, 13:53  [ТС]
А разве нельзя переменной int[] Array присвоить ссылку на новый массив:
Array = NewArray;

??
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
20.10.2011, 13:57
C# не C++. Чтобы сделать из обычного int[] больший или меньший int[] - понадобятся пляски с бубном,сильнейшие шаманские заклинания и отборные чукотские мухоморы. И по производительности (и расходуемой памяти) все будет в разы уступать обычному List<>.
0
Заблокирован
20.10.2011, 14:37
Joshim, закоментируйте строку 23 в своем коде.

Не по теме:

мухоморы мы припрячем - пригодятся.;)

0
2 / 2 / 0
Регистрация: 28.09.2011
Сообщений: 26
21.10.2011, 16:40  [ТС]
Цитата Сообщение от Joshim Посмотреть сообщение
А разве нельзя переменной int[] Array присвоить ссылку на новый массив:
Array = NewArray;

??
Переменная ссылки на объект может ссылаться только на объект своего типа или на объект производного класса. Поэтому не присваивается новая ссылка переменной
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
21.10.2011, 18:36
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
using System;
 
static class Program
{
    public static void Main()
    {
        //Создать объект
        DynamicArray array = new DynamicArray(10);
 
        //заполнить объект данными
        for (int i = 0; i < array.Length; i++)
            array[i] = i;
 
        //вывести данные объекта
        Console.WriteLine("Данные до расширения динамического массива:");
        for (int i = 0; i < array.Length; i++)
            Console.WriteLine(array[i]);
 
        //расширить массив
        array.Length = 15;
 
        //заполнить объект данными
        for (int i = 0; i < array.Length; i++)
            array[i] = i;
 
        //вывести данные объекта
        Console.WriteLine("Данные после расширения динамического массива:");
        for (int i = 0; i < array.Length; i++)
            Console.WriteLine(array[i]);
    }
}
 
public class DynamicArray
{
    protected int[] array;
 
    public DynamicArray(int length)
    {
        if (value <= 0)
            throw new ArgumentException("Длинна динамического массива должна быть больше нуля.", "value");
        array = new int[length];
    }
 
    public int Length
    {
        get
        {
            return array.Length;
        }
        set
        {
            if (value <= 0)
                throw new ArgumentException("Длинна динамического массива должна быть больше нуля.", "value");
            int[] temp = new int[value];
            Array.Copy(array, temp, array.Length <= value ? array.Length : value);
            array = temp;
        }
    }
 
    protected void CheckIndex(int index)
    {
        if (index < 0 || index >= array.Length)
            throw new ArgumentException("Указан индекс вне границ динамического массива.", "index");
    }
 
    public int this[int index]
    {
        get
        {
            CheckIndex(index);
            return array[index];
        }
        set
        {
            CheckIndex(index);
            array[index] = value;
        }
    }
}
P.S. Исправил пару ошибок.
0
JeanLouis
19.04.2012, 13:21
Написал недавно неплохую, как мне кажется, статью о динамических массивах:
Динамические массивы в C#

А собственно по реализации динамического массива поверх станадртного массива я писал тут:
Изменение массива в C#

Надеюсь, на будущее, поможет кому-то, чтобы не задавать подобных вопросов.
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2012, 13:21
Помогаю со студенческими работами здесь

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

Динамический массив. Ошибка при выполнении программы
Программа должна предоставить заполнение массива пользователю, а дальше вывести массив на экран. (Массив динамический) При компиляции...

Ошибка при вводе в динамический двумерный массив
заполнить матрицу не могу. ошибка где то от 19 до 24 строки. #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; ...

Ошибка при чтении символов строки и динамический массив классов
Добрый день, не знаю на каком языке я думал, когда писал это, но казалось что вот раз и всё заработает... 1)Конструктор по умолчанию...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru