Нет (хорошего, стандартного, переносимого) способа определить по одному только значению указателя, является ли он первым элементом массива или нет, и сколько элементов следует за ним. Эту информацию нужно отслеживать отдельно.
Если вы пишете на C ++, не делайте своего собственного управления памятью, если можете. Используйте стандартный тип контейнера, например std::vector
или std::map
(или std::string
для текста). Если вы должны самостоятельно управлять памятью, используйте операторы new
и delete
вместо библиотечных функций *alloc
и free
и оберните класс вокруг этих операций, который также отслеживает сколько элементов было выделено (которое, как и std::vector
и std::map
, возвращается с помощью метода size()
только для чтения).