Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
32 / 32 / 28
Регистрация: 19.09.2013
Сообщений: 370

Код приводит к переполнению массива

27.10.2014, 17:37. Показов 918. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код ведет себя странно, а именно:
1)При первом вызове html2buf или аналогичных функций, текстбокс получает много пустых строк
2)При втором вызове программа вылетает с ошибкой переполнения массива
Кликните здесь для просмотра всего текста

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
public partial class Form1 : Form
    {
        string[] htmlbuf, cssbuf, jsbuf;
        byte IsType=0; //0-HTML 1-CSS 2-JS
        public Form1()
        {
            InitializeComponent();
        }
 
        void html2buf()
        {
           int i = 0;
           foreach (string str in codeBox1.Lines)
           {
               htmlbuf[i] = str;
               ++i;
           }
        }
 
        void css2buf()
        {
            int i = 0;
            foreach (string str in codeBox1.Lines)
            {
                cssbuf[i] = str;
                ++i;
            }
        }
 
        void js2buf()
        {
            int i = 0;
            foreach (string str in codeBox1.Lines)
            {
                jsbuf[i] = str;
                ++i;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            htmlbuf = new string[1024];
            cssbuf = new string[1024];
            jsbuf = new string[1024];
        }
 
        private void linkLabel1_Click(object sender, EventArgs e)
        {
            if (IsType!=0)
            {
                if (IsType==1)
                {
                    css2buf();
                    codeBox1.Text = "";
                    foreach (string str in htmlbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
                
                else if (IsType==2)
                {
                    js2buf();
                    codeBox1.Text = "";
                    foreach (string str in htmlbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
            }
        }
 
        private void linkLabel2_Click(object sender, EventArgs e)
        {
            if (IsType != 1)
            {
                if (IsType == 0)
                {
                    html2buf();
                    codeBox1.Text = "";
                    foreach (string str in cssbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
 
                else if (IsType == 2)
                {
                    js2buf();
                    codeBox1.Text = "";
                    foreach (string str in cssbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
            }
        }
 
        private void linkLabel3_Click(object sender, EventArgs e)
        {
            if (IsType != 2)
            {
                if (IsType == 1)
                {
                    css2buf();
                    codeBox1.Text = "";
                    foreach (string str in jsbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
 
                else if (IsType == 0)
                {
                    html2buf();
                    codeBox1.Text = "";
                    foreach (string str in jsbuf)
                    {
                        codeBox1.Text += str + "\n";
                    }
                }
            }
        }
    }


Добавлено через 2 часа 5 минут
Опытным путем было доказано, что переполнение массива происходит от разрыва строки. Также исправил еще одну недоработку, но не понимаю, как сохранять разрывы строк.
Кликните здесь для просмотра всего текста

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
public partial class Form1 : Form
    {
        string[] htmlbuf, cssbuf, jsbuf;
        byte IsType=0; //0-HTML 1-CSS 2-JS
        public Form1()
        {
            InitializeComponent();
        }
 
        void html2buf()
        {
           int i = 0;
           foreach (string str in codeBox1.Lines)
           {
               htmlbuf[i] = str;
               ++i;
           }
        }
 
        void css2buf()
        {
            int i = 0;
            foreach (string str in codeBox1.Lines)
            {
                cssbuf[i] = str;
                ++i;
            }
        }
 
        void js2buf()
        {
            int i = 0;
            foreach (string str in codeBox1.Lines)
            {
                jsbuf[i] = str;
                ++i;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            htmlbuf = new string[1024];
            cssbuf = new string[1024];
            jsbuf = new string[1024];
        }
 
        private void linkLabel1_Click(object sender, EventArgs e) //Show HTML
        {
            if (IsType!=0)
            {
                if (IsType==1)
                {
                    css2buf();
                    codeBox1.Text = "";
                    foreach (string str in htmlbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
                
                else if (IsType==2)
                {
                    js2buf();
                    codeBox1.Text = "";
                    foreach (string str in htmlbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
                IsType = 0;
            }
        }
 
        private void linkLabel2_Click(object sender, EventArgs e) //Show CSS
        {
            if (IsType != 1)
            {
                if (IsType == 0)
                {
                    html2buf();
                    codeBox1.Text = "";
                    foreach (string str in cssbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
 
                else if (IsType == 2)
                {
                    js2buf();
                    codeBox1.Text = "";
                    foreach (string str in cssbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
                IsType = 1;
            }
        }
 
        private void linkLabel3_Click(object sender, EventArgs e) //Show JS
        {
            if (IsType != 2)
            {
                if (IsType == 1)
                {
                    css2buf();
                    codeBox1.Text = "";
                    foreach (string str in jsbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
 
                else if (IsType == 0)
                {
                    html2buf();
                    codeBox1.Text = "";
                    foreach (string str in jsbuf)
                    {
                        codeBox1.Text += str;
                    }
                }
                IsType = 2;
            }
        }
    }


Добавлено через 6 минут
Объясняю как должно работать: есть один текстбокс, который должен работать с тремя разными текстами. Кнопками можно переключать эти режимы. Под разные тексты используются массивы строк (называю их буферами). Под определение текущего текста используется переменная IsType. В теории все идеально, но на деле либо массив переполняется от разрывов строк, хотя я мог написать всего 1 букву, или же массив не переполняется, но разрыв строк не хранится.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.10.2014, 17:37
Ответы с готовыми решениями:

Программа, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению
Исходные данные ввести в диалоге с клавиатуры. На экран вывести исходные данные и результаты работы программы. Отладить и...

Программа, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению
Помогите с заданием 5 Составить программу, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению (т.е....

Определить, не приводит ли суммирование двух целых чисел А и В к переполнению
Составить программу, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению (т.е. к результату большему,...

1
32 / 32 / 28
Регистрация: 19.09.2013
Сообщений: 370
28.10.2014, 12:25  [ТС]
Изменил код, заменив массивы строк на хранения в отдельных файлах. Однако не все проблемы устранены.
Кликните здесь для просмотра всего текста
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    public partial class Form1 : Form
    {
        StreamWriter cout;
        StreamReader cin;
        string path_html = "temp_html.html", path_css = "temp_css.css", path_js = "temp_js.js";
        byte IsType=0; //0-HTML 1-CSS 2-JS
        public Form1()
        {
            InitializeComponent();
        }
 
        void html2buf()
        {
            cout = new StreamWriter(path_html,false, Encoding.UTF8);
            foreach (string str in codeBox1.Lines)
            {
                cout.WriteLine(str);
            }
            cout.Close();
        }
 
        void css2buf()
        {
            cout = new StreamWriter(path_css, false, Encoding.UTF8);
            foreach (string str in codeBox1.Lines)
            {
                cout.WriteLine(str);
            }
            cout.Close();
        }
 
        void js2buf()
        {
            cout = new StreamWriter(path_js, false, Encoding.UTF8);
            foreach (string str in codeBox1.Lines)
            {
                cout.WriteLine(str);
            }
            cout.Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            if (!File.Exists(path_html)) { cout = new StreamWriter(path_html, false, Encoding.UTF8); ; cout.Write(" "); cout.Close(); } else { cout = new StreamWriter(path_html, false, Encoding.UTF8); cout.Close(); }
            if (!File.Exists(path_css)) { cout = new StreamWriter(path_css, false, Encoding.UTF8); ; cout.Write(" "); cout.Close(); } else { cout = new StreamWriter(path_css, false, Encoding.UTF8); cout.Close(); }
            if (!File.Exists(path_js)) { cout = new StreamWriter(path_js, false, Encoding.UTF8); ; cout.Write(" "); cout.Close(); } else { cout = new StreamWriter(path_js, false, Encoding.UTF8); cout.Close(); }
        }
 
        private void linkLabel1_Click(object sender, EventArgs e) //Show HTML
        {
            if (IsType!=0)
            {
                html2buf();
                if (IsType==1)
                {
                    cin = new StreamReader(path_css, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
                
                else if (IsType==2)
                {
                    cin = new StreamReader(path_js, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
                IsType = 0;
            }
        }
 
        private void linkLabel2_Click(object sender, EventArgs e) //Show CSS
        {
            if (IsType != 1)
            {
                css2buf();
                if (IsType == 0)
                {
                    cin = new StreamReader(path_html, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
 
                else if (IsType == 2)
                {
                    cin = new StreamReader(path_js, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
                IsType = 1;
            }
        }
 
        private void linkLabel3_Click(object sender, EventArgs e) //Show JS
        {
            if (IsType != 2)
            {
                js2buf();
                if (IsType == 1)
                {
                    cin = new StreamReader(path_css, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
 
                else if (IsType == 0)
                {
                    cin = new StreamReader(path_html, Encoding.UTF8);
                    codeBox1.Text = cin.ReadToEnd();
                    cin.Close();
                }
                IsType = 2;
            }
        }
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.10.2014, 12:25
Помогаю со студенческими работами здесь

Как проверить, не приводит ли суммирование двух целых чисел A и B к переполнению (т.е. к результату большему, чем 32767)
Составит программу, которая проверяла бы, не приводит ли суммирование двух целых чисел A и B к переполнению (т.е. к результату большему,...

Почему следующий код приводит к зависанию?
signed int f = -0x80000000; signed int t = -1; signed int k = (f / t);

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

Хранение массива в Application приводит к ошибке ASP 0197 (0x80004005)
Я многого у ASP не прошу, я просто хочу сохранить объект 'массив' в Application: <SCRIPT LANGUAGE='JavaScript' RUNAT='Server'> ...

Функция изменение массива один раз, приводит к его изменению везде
Пишу программу, изменяю присваиваю массиву s1 значения s2, после меняю значения в s2 и они меняются в s1, как этого избежать?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
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),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru