Другие ответы верны в отношении strncpy .Это, вероятно, источник проблемы, о которой вы спрашиваете.
Но я обеспокоен этим утверждением:
Я проверяю m_p на ноль, потому что я думаю, что в режиме отладки MSлюбит устанавливать адрес 0xcccccccc вместо 0x00000000.
Он только устанавливает неинициализированные указатели на 0xcccccccc.Это делает это, чтобы помочь поймать места, где ваш код предполагает, что неинициализированный указатель установлен в 0x00000000.В C ++ вы всегда должны помнить, что примитивные типы (указатели, char, short, int, float и т. Д.) Не имеют гарантированного значения, если их оставить неинициализированными.
Так что если вы оставляете этот указатель неинициализированным в режиме выпуска, иногда это можетбыть 0x00000000 и иногда это могут быть значения мусора, которые не равны нулю.И это очень вероятно вызовет проблемы в том, что вы пытаетесь сделать.
if (m_p != NULL) m_p = NULL;
не является решением.Решение состоит в том, чтобы установить m_p
в NULL
в конструкторе вашего класса.Таким образом, вы гарантируете, что он имеет правильное значение, когда вы ожидаете.