C/Visual C - Creacion puntero a cjto. de enteros

 
Vista:

Creacion puntero a cjto. de enteros

Publicado por albertoz (20 intervenciones) el 03/05/2004 22:16:55
Amigos:
Tengo la sgte. declaracion en C++.

int g_ordm=3;
int *A=new int(g_ordm*g_ordm);
int *B=new int(g_ordm*g_ordm);

Al crearlo y viendo la ejecucion paso a paso el puntero comparte la memoria, lo que no deseo que se realice. Tiene 8 bytes de longitud es decir 4 elementos cuando quiero que tenga 9 elementos cada uno pero que uno sea independiente del otro.

Si lo hago de esta manera
int *A;
int *B=(A+g_ordm*g_ordm);

Se ejecuta bien pero deseo encontrar la manera correcta de declararlo

Alguna sugerencia?

Gracias de antemano

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Creacion puntero a cjto. de enteros

Publicado por chuidiang (677 intervenciones) el 04/05/2004 10:42:56
Con la primera declaración

int g_ordm=3;
int *A=new int(g_ordm*g_ordm);
int *B=new int(g_ordm*g_ordm);

los punteros son independientes. Compruebalo inmediatamente después de los new
Si comparten memoria es porque despues, en algun sitio del codigo, haces algo como A=B; Eso iguala los punteros, no hace copia de los datos.

Lo de

int *A;
int *B=(A+g_ordm*g_ordm);

es peligroso tal cual lo tines, puesto que los punteros no estan bien inicializados. Tendrias que hacer un new con el total y luego asignar A y B. Podría ser algo como esto

// Haces hueco para 9 + 9 elementos
int *A = new int [g_ordm*g_ordm + g_ordm*g_ordm];
// Haces que B apunte al segundo grupo
int *B = A + g_ordm*g_ordm;

Otra cosa de la que no estoy seguro. He comprobado que el compilador que tengo traga tanto new int() como new int[] pero no estoy muy seguro de si es lo mismo. Haz alguna prueba.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Creacion puntero a cjto. de enteros

Publicado por JoseGR (41 intervenciones) el 04/05/2004 10:44:45
Hola, para definir dinamicamente un arreglo no se usan los ( ) sino los [ ], de esta manera:

int g_ordm=3;
int *A=new int[g_ordm*g_ordm];
int *B=new int[g_ordm*g_ordm];

Ahora la segunda forma te funciona pero es de casualida ya que realmente lo que estas haciendo se "pisando" memoria que no tienes reservada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar