Мой код компилируется без ошибок, но что это значит?
etherate.cpp:432:11: warning: deleting array ‘unsigned char broadMAC [6]’ [enabled by default]
Это из этой строки, где я удаляю массив без знака;
delete [] broadMAC;
Можно ли оставить все как есть, если нет, то как я могу улучшить это?
Благодарю.
ОБНОВИТЬ
Как объявляется broadMAC?
От примерно 10 строк предыдущего;
unsigned char broadMAC[6] = {destMAC[0], destMAC[1], destMAC[2], destMAC[3], destMAC[4], destMAC[5]};
destMAC также является массивом без знака со значениями, хранящимися в нем.
Мне нужно было скопировать их, сделать что-нибудь с destMAC, а затем восстановить исходные значения; поэтому я объявил broadMAC и хочу удалить его после.
G ++ позволяет включать и отключать много предупреждений (например, -Wctor-dtor-privacy
, -Woverloaded-virtual
, -W...
), указав их в командной строке. Некоторые предупреждения включены, без необходимости делать это в командной строке, другие должны быть явно запрошены.
Итак, некоторые предупреждения:
«включен по умолчанию»
и некоторые из них:
«отключено по умолчанию»
broadMAC
распределяется в автоматической памяти, вот так:
unsigned char broadMAC[6];
а потом звонишь
delete[] broadMAC;
что неправильно, так как вы не выделяли его new[]
,
С помощью delete
/delete[]
в памяти не выделено new
/new[]
приводит к неопределенному поведению, и ваш компилятор достаточно умен, чтобы сказать в этом случае.
Вам не нужно беспокоиться об освобождении памяти, она будет освобождена автоматически.
Вы пытаетесь освободить массив, который вы разместили в стеке, а не кучу. Поэтому, когда переменная выходит из области видимости, она освобождает себя, и вы не должны / не можете освобождать ее явно.