[C con Clase] Problema conceptual al pasar por referencia array de 2 dimensiones en C

Horacio Peñafiel horacio.penafiel en donweb.com
Mie Jun 10 21:45:36 CEST 2015


Diego, probá con esta implementación del método probar():

void probar(float *referencia)
{

     printf("La posición de memoria donde empieza el array 
multidimensional es %p\n", referencia);

     //No imprime el siguiente printf y vuelve al ssitema con un error 
0xC0000005

     printf("test: %f %f...!\nPuntero: %p\n", (&referencia)[0][0], 
(&referencia)[0][1] , referencia);
}

Parece ser que C no trata exactamente de la misma forma a los arrays que 
los punteros, de ahí la des-referencia con (&referencia)[n][n]...

Espero te sirva. Saludos!

Ing. Horacio Peñafiel


El 10/06/2015 a las 03:17 p.m., Diego escribió:
> Hola, saludos a todos.
>
> Aparentemente estoy teniendo un error conceptual. Copio el código
> abajo. Alguien podría ayudarme?
>
> Al intentar acceder a un elemento del aray desde el main no tengo
> problemas, pero al intentar acceder desde una función el programa
> retorna al sistema operativo un código de error (0xC0000005) y
> porsupuesto que no continúa.
>
> Según los printf, los punteros apuntan a la misma posicion de memoria
> tanto en el main como en la función, que estoy haciendo mal?
>
> PD: estoy compilando en Windows mediante Code::Blocks en Windows
> mediante gcc, el error que da, según google, corresponde a una
> violación de acceso a memoria.
>
> Saludos y gracias!
>
> ----------------------------------------------
>
> #include <stdio.h>
> #include <stdlib.h> //No es necesario
>
> void probar(float **referencia)
> {
>
>      printf("La posición de memoria donde empieza el array
> multidimensional es %p\n", referencia);
>
> //No imprime el siguiente printf y vuelve al ssitema con un error 0xC0000005
>
>      printf("test: %f %f...!\nPuntero: %p\n", referencia[0][0],
> referencia[0][1], referencia);
> }
>
> int main()
> {
>      float test[5][5]={1, 2, 3, 4, 5};
>
>      printf("La posición de memoria donde empieza el array
> multidimensional es %p\n", test);
>
>      printf("test: %f %f...!\nPuntero: %p\n", test[0][0], test[0][1], test);
>
>      probar(test);
>
>      return 0;
> }
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20150610/8cc74b9e/attachment.html>


Más información sobre la lista de distribución Cconclase