accediendo a los elementos en un puntero en 2D que apunta a un array dinámico en C++
<h1>include <iostream></h1>
<p>using namespace std;</p>
<p>void create(int** mapa);</p>
<p>int main() {
int** mapa;
create(mapa);
cout << endl << "imprimiendo mapa en main" << endl;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
mapa[i][j] = 1;
cout << mapa[i][j] << " ";
}
cout << endl;
}
return 0;
}</p>
<p>void create(int** mapa) {
int x = 8, y = 8;</p>
<pre><code>mapa = new int* [x];
for (int i = 0; i < x; i++) {
mapa[i] = new int[y];
}
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
mapa[i][j] = 1;
cout << mapa[i][j] << " ";
}
cout << endl;
}
</code></pre>
<p>}
He estado intentando leer los elementos de un puntero 2D que apunta a un arreglo dinámico en la función principal, pero no parece funcionar, he intentado leerlo usando bucles dobles y ((mapa + i) + j) pero sin éxito.
davy.ai
El problema en el código dado es que el puntero 2D
map
no se pasa por referencia a la funcióncreate
. Por lo tanto, los cambios realizados enmap
dentro de la funcióncreate
no se reflejan en el punteromap
en la funciónmain
.Para solucionar esto, podemos pasar el puntero 2D por referencia a la función
create
. Esto se puede hacer cambiando la firma de la función avoid create(int**& map)
.Además, las variables
x
ey
no están definidas en la funciónmain
. Necesitamos definirlas antes de usarlas en el bucle para imprimir los elementos demap
.Aquí está el código corregido:
“`c++
#include
using namespace std;
void create(int**& map);
int main() {
int** map;
create(map);
cout << endl << “printing map in main” << endl;
int x = 8, y = 8;
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
cout << map[i][j] << ” “;
}
cout << endl;
}
return 0;
}
void create(int**& map) {
int x = 8, y = 8;
}
“`
Ahora, cuando ejecutemos este programa, deberíamos ver los elementos de
map
impresos correctamente en la funciónmain
después de que hayan sido inicializados en la funcióncreate
.