Este array puede ir creciendo y para añadir un nuevo elemento creo un nuevo puntero a array de punteros con un tamaño superior en una unidad.
Mi duda es si al copiar los valores del viejo array de punteros debo eliminar el contenido de cada posición despues de copiar el valor al nuevo array.
No se si me he explicado bien... igual con el codigo se entiende a que me refiero
Código:
De hecho si hago el delete this->data[i] el programa sigue funcioando correctamente, asi que supongo que en la linea anterior ( temp[i] = this->data[i]; ) lo que está realizando es una copia por lo tanto si que debería eliminar this->data[i] pero no acabo de ver el porque: no estoy copiando la dirección de memoria?class protocolo { unsigned char packetSize; unsigned char* packetNumber; unsigned char** data; void addData( int data ) { int packet_number = this->getPacketNumber() + 1; this->setPacketNumber( packet_number ); //Hay que redimensionar el array en una posición unsigned char** temp; //Puntero a un array de punteros temp = new unsigned char*[ packet_number ]; //Array de punteros con PACKET_NUMBER posiciones //Copiamos el array for( int i=0; i< (packet_number-1); i++ ) { temp[i] = this->data[i]; //Copiamos el valor o la referencia?? delete this->data[i]; //Y me cargo el viejo DEBO ELIMINARLO?? } delete [] this->data; //Liberamos la memoria usada por this.data this->data = temp; //this.data apunta al nuevo array de datos //ahora hay que añadir el nuevo dato //Cada posicion de this->data es otro array de chars de longitud (int)packetSize int tamanyo = (int)this->packetSize; unsigned char* nuevo_dato = new unsigned char[ tamanyo ]; //Reservamos memoria para el nuevo campo cout << "Posicion de memoria del nuevo dato:" << (int)nuevo_dato << "\n"; nuevo_dato = this->splitInt( data, tamanyo ); //Copiamos el DATA a el nuevo_dato this->data[ (tamanyo-1) ]; //Hacemos que la ultima posicion apunte al nuevo_dato } }
PD:No, si hago el delete this->data[i] el programa no funciona correctamente... el ultimo valor introducido machaca al que le precede por lo que supongo que estoy copiando la dirección de memoria.