Esa sintaxis no es válida. Al asignar primero espacio para los punteros a las cadenas, la memoria no va a ser contínua y debes asignar espacio, despues, para cada cadena.
Puedes realizar una reserva global con new, igual que con malloc.
items_de_descripcion = (char**) new char[cantidad_items * capacidad + cantidad_items * sizeof(char*)];
Luego asignas los valores de los punteros (al inicio del espacio de la memoria localizada) a la dirección de las cadenas que vendrán una detrás de otra en la posición items_de_descripcion + cantidad_items * sizeof(char*);
Esto se puede hacer pero es mas lioso, difícil de entender y de leer mas adelante...
Saludos.
osea lo que hacia con malloc si se que era una asignacion global, osea el tamanio total de la matriz. pero pense que con esa forma de new (la que no compila) era tambien asignacion global PARA una matriz.
pero ahora segun observo
items_de_descripcion = (char**) new char[cantidad_items * capacidad + cantidad_items * sizeof(char*)];
esto asignaria el tamaño total de la matriz pero de forma contigua, es esto asi ?
y explicame otra cosa, esto
.... Al asignar primero espacio para los punteros a las cadenas, la memoria no va a ser contínua y debes asignar espacio, despues, para cada cadena.
.....
entiendo que inclusive el compilador no acepta de otra forma, pero porque esa necesidad de hacerlo asi, osea primero los 5 punteros y despues los vectores de cada uno
si puedes contestarme esas dos preguntas te lo agradeceria me has ayudado a entender, gracias