sizeof(arr)
, когда arr
объявлен как фактический массив с измерением, даст вам размер массива в байтах (на самом деле, C ++ не знает байтов, только char
s, но давайте не будем сейчас вдаваться в это). Символ arr[sizeof(arr)]
не имеет смысла: вы говорите компилятору получить элемент, индекс которого численно равен размеру массива в байтах, который всегда выходит за пределы. Кстати, чтобы получить размер массива в элементах , используйте: sizeof(arr) / sizeof(arr[0])
.
sizeof(arr)
, когда char *arr
даст вам размер указателя (обычно 4 или 8 байтов в зависимости от битности), независимо от того, насколько велик массив «ниже» этого указателя.
Даже когда вы исправите все это (и пару других более мелких вещей, таких как использование NULL
в качестве целого числа), вы все равно будете просто перемещать элемент в конец массива, а не re -движу его.
Я предлагаю вам использовать std::vector
и его erase
метод. Если вы делаете много удалений с середины (и вы можете жить без произвольного доступа), рассмотрите вариант использования std::list
(и его erase
). Кроме того, вы также можете рассмотреть std::remove
.