Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/11/2007, 04:59
clinisbut
 
Fecha de Ingreso: diciembre-2004
Mensajes: 278
Antigüedad: 19 años, 6 meses
Puntos: 0
Liberar memoria a la que apunta un puntero

Tengo un puntero que apunta a un array de punteros.
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:
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
	}
}
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?

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.

Última edición por clinisbut; 23/11/2007 a las 05:23