Yes, when you allocate an array using the new …[…] syntax, you should deallocate it using delete[]. In your case, you need delete[] cname;.
If you use the wrong form of delete to match your allocation with new, you have undefined behaviour:
§5.3.5/2 [expr.delete] In the first alternative (delete object), the value of the operand of delete may be a null pointer value, a pointer to a non-array object created by a previous new-expression, or a pointer to a subobject representing a base class of such an object. If not, the behavior is undefined. In the second alternative (delete array), the value of the operand of delete may be a null pointer value or a pointer value that resulted from a previous array new-expression. If not, the behavior is undefined.