[C con Clase] Ayuda Manejo De Memoria

D1e6o! diegogeid en gmail.com
Lun Jul 21 05:45:50 CEST 2008


Hola.

Steven: Muchas gracias por toda tu ayuda, que es de muy buen nivel!


Si yo quisiera tratarlo como una matriz tabla[y][x] del tamaño MAX-1,
2*MAX-1o sea char tabla[MAX-1][MAX*2-1]; estaría bien hacerlo así?
...
#define MAX 101
...
tabla=(char**)malloc(sizeof(char*)*(MAX-1));
*tabla=(char*)malloc((2*MAX-1)*MAX*sizeof(char));
for(cuenta=0; cuenta<MAX;cuenta++)tabla[cuenta]=&tabla[0][(2*MAX-1)*cuenta];

Por lo menos lo compila sin problemas, pero no se si estará bien

Y para llenar con 0 la matriz por completo estaría bien hacerlo así?

memset(&tabla[0][0],0,(MAX-1)*(2*MAX-1));

Muchas gracias! Saludos!

El día 19 de julio de 2008 18:28, Steven Davidson <srd4121 en njit.edu> escribió:
> Hola Diego,
>
> D1e6o! wrote:
>> Buenas...
>>
>> Tengo problemas con el manejo de memoria.
>>
>> A veces, necesito matrices muy grandes y no se cual es la forma
>> correcta de operar...
>>
>> Debería usar malloc, supongo...? y los punteros, deben ser de algun
>
> Si se trata de arrays muy grandes o arrays cuyos tamaños son
> desconocidos en tiempo de compilación, entonces necesitas usar técnicas
> para manejar memoria dinámicamente.
>
> Si estás usando C, entonces sí necesitas usar 'malloc()', pero si usas
> C++, entonces sugiero usar 'new[]'.
>
>> tipo en especial? Son necesarios los punteros especiales? y cual es el
>> tipo de puntero por defecto?
>>
>
> No sé a qué te refieres con "punteros especiales" ni con "puntero por
> defecto". Es posible que estés pensando en 'void *' que a veces se llama
> "puntero genérico".
>
>> Se que es muy general mi pregunta, pero me genera muchos problemas.
>>
>> Por ejemplo, si necesito crear una tabla de 20000*10000 del tipo char,
>> cual sería la forma óptima de hacerlo?
>>
>
> Necesitaremos un puntero doble; esto,
>
> char **pMatriz;
>
> Ahora bien, tenemos dos formas de implementar el concepto de una matriz:
>
> 1. Crear un array dinámico de punteros e ir creando cada cadena
> independientemente.
>
> 2. Crear un array dinámico de punteros pero crear una única cadena. Esto
> parece más bien un solo array de 200000000 'char' en vez de tener varias
> cadenas "sueltas".
>
>
> Por simpleza, usaremos el método #1. Básicamente, tenemos que crear un
> array de punteros, que en nuestro modelo de "matriz", podemos pensar que
> se trata de crear "las filas":
>
> pMatriz = new char*[20000];  // 20000 "filas"
>
> Ahora creamos cada cadena asignándola a cada puntero; o dicho de otra
> forma, creamos las columnas para cada fila:
>
> for( int f=0; f<20000; f++ )
>   pMatriz[f] = new char[10000];  // Cada fila tiene 10000 columnas
>
> Ya hemos creado la matriz de 'char' o la lista de cadenas de caracteres,
> según cómo lo mires.
>
>
> Sugiero consultar el capítulo 17 de nuestro curso de C++:
> http://c.conclase.net/curso/index.php?cap=017
>
>
> Espero que esto te ayude.
>
> Steven
>
>
> _______________________________________________
> 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
>




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