Как я могу узнать количество выделенной памяти под массив char? (Динамическая память)
Как мне узнать количество char-ов которые выделены с помощью new??
Ответы (2 шт):
Можно использовать
strlen(char_arr), это выдаёт количество именно использованных char а не выделенных. Так-же можете попробовать sizeof(char_arr) / sizeof(char), но это работает только при создании массива таким образом: char str[10];.
И да, для использования strlen должна быть подключена библиотека iostream либо string, но если вы не хотите их использовать, вот простенький аналог:
char* str = new char[11];
arr = "test";
int len = 0;
for(int i = 0; ; i++) {
if(arr[i] != NULL) len++; else break;
}
Переменная len будет содержать количество ** использованных** символов в этом char массиве.
Насколько мне известно (но я могу ошибаться) не существует документированного способа узнать размер динамически выделенного массива по его указателю. Соответственно, возможны следующие варианты:
Вместе с указателем на массив сохранять размер последнего в переменной. Например:
char* pMyArray = new char[NUM_CHARS];int myArrayLen = NUM_CHARS;Следует из (1) - использовать класс-обёртку, представляющий пару "указатель на массив, размер массива". Например, в черновом варианте это может выглядеть так:
template <typename T=char> class CDynamicArray { T* m_pData; int m_length; public: CDynamicArray() { m_pData = nullptr; } T* Create(int length) { m_pData = new T[length]; m_length = length; return m_pData; } void Delete() { if (m_pData) { delete[] m_pData; m_pData = nullptr; } } T* GetData() { return m_pData; } int GetLength() { return m_length; } ~CDynamicArray() { Delete(); } CDynamicArray(const CDynamicArray&) = delete; };Не изобретать велосипед, а использовать уже готовое решение
std::vector(https://en.cppreference.com/w/cpp/container/vector).