#c #arrays #constructor #initialization #indexoutofboundsexception
#c #массивы #конструктор #инициализация #исключение indexoutofboundsexception
Вопрос:
Я пытаюсь инициализировать эти два массива символов внутри конструктора. Ошибка связана с массивами символов buf и clientip, с остальными все в порядке. Я добавил код всего конструктора ниже:
class server : public udp {
public:
server() {
clientLength = 0;
buf[1024] = {};
bytesIn = 0;
count = 0;
clientIp[256] = {};
portnumber = 0;
}
private:
int clientLength = sizeof(client);
char buf[1024];
int bytesIn;
int count = 0;
char clientIp[256];
unsigned short portnumber = 70000;
Предупреждение заключается в том, что:
*(ошибка) Массив ‘buf[1024]’, доступ к которому осуществляется с индексом 1024, который выходит за рамки. [ArrayIndexOutOfBounds]
(ошибка) Массив ‘ClientIP[256]’, доступ к которому осуществляется по индексу 256, который выходит за рамки. [ArrayIndexOutOfBounds]*
Как я могу решить эту проблему?
Комментарии:
1. Это точно говорит вам, в чем проблема:
buf[1024] = {};
в вашем конструкторе осуществляется доступ к элементу 1024, который выходит за рамки. Удалите [1024]. А еще лучше, переместите все это в раздел инициализации конструктора или присвоите значения по умолчанию в разделе private.2. @sweenish Большое спасибо за ваш ответ. Можете ли вы показать мне в коде, что вы имеете в виду для первой части решения
Ответ №1:
buf[1024] = {};
не то, что вы хотите. Он получит доступ к 1024-му элементу buf
и по умолчанию инициализирует только этот элемент, но он выходит за рамки.
Чего вы, вероятно, хотите:
class server : public udp {
public:
server() : clientLength(), buf(), bytesIn(), count(), clientIp(), portnumber(){
}
Вы всегда должны отдавать предпочтение списку инициализации элемента, когда это возможно.