elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda doble puntero char a matriz de char
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda doble puntero char a matriz de char  (Leído 5,998 veces)
neo_from_cs_matrix

Desconectado Desconectado

Mensajes: 35


Ver Perfil
duda doble puntero char a matriz de char
« en: 4 Septiembre 2011, 19:59 pm »

yo se que este tema fue discutido pero todavia no entiendo porque esto que compilamdo bien, no funciona. no se porque el compilador no reconoce mi declaracion

Código:
char **mVector = (char**)malloc(sizeof(char)*(filas*columnas));

como si fuera una matriz, mas bien lo reconoce como un vector de vectores,
pero como creo entonces una matriz de  char dinamicamente?

Código:
int main(int argc, char *argv[])
{
int filas=7;
int columnas=16;
char **mVector = (char**)malloc(sizeof(char)*(filas*columnas));

       //memset(mVector, 0, sizeof(char)*(filas*columnas));
       for(int r=0;r<7;r++)
for(int s=0; s<16;s++)
mVector[r][s]=0;

for(int rr=0;rr<7;rr++)
for(int ss=0; ss<16;ss++)
cout << mVector[rr][ss]<<endl;//ERROR al leer!!!!!!!!


free(mVector);


        system("pause");
return 0;
}


http://foro.elhacker.net/programacion_cc/martiz_de_char_doble_puntero-t333527.0.html
en mi anterior tema me dijeron que debia reservar memoria primero para los vectores supongamos que son 7 en mi caso, y despues sus longitudes osea 16,
pero me confunde esta forma de hacerlo, no hay una mas directa asi como en el codigo mostrado ?


>>

esto fue solucionado asi pero como ya digo, no se porque debe hacerse asi por partes y no todo junto (osea multiplicando filas por columas lo cual da la dimension).
...  :¬¬

Código:

void main()
{
        int filas=7;
int columnas=16;
//char** mVector = (char**)malloc(sizeof(char)*(filas*columnas));
char** mVector = (char**)malloc(sizeof(char*)*(filas*columnas));
for(int read=0;read<filas;read++){
mVector[read] = (char*)malloc(sizeof(char)*columnas);
}

//memset(mVector, 0, sizeof(char)*(filas*columnas));
for(int r=0;r<7;r++)
for(int s=0; s<16;s++)
mVector[r][s]='X';

for(int rr=0;rr<7;rr++)
for(int ss=0; ss<16;ss++)
cout << rr << ":" << ss << "  " << mVector[rr][ss]<<endl;

free(mVector);
system("pause");
}

si alguien fuera amable de decirme porque  :rolleyes:
o por deduccion contraria, que es lo que ahce esto entonces  :huh:

Código:
char** mVector = (char**)malloc(sizeof(char)*(filas*columnas));

porque ami forma de apreciarlo esto calcula la dimension total ...



« Última modificación: 4 Septiembre 2011, 20:24 pm por neo_from_cs_matrix » En línea

LearningSpanishProgrammer

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: duda doble puntero char a matriz de char
« Respuesta #1 en: 4 Septiembre 2011, 21:10 pm »

Se recorde que esto:
Código:
char ** m

significa que 'm' es un vector de puntero para un puntero para un (arreglo de) char.

Cuando tu llhama 'malloc' estas pidiendo una region de la memoria con 'sizeof(char) * m * n'. Sin embargo, esta región no es formado por punteros para punteros para char. Esta region es lineal.

Pero lo compilador no sabes que quieres usar esto como una matriz.

Esto
Citar
char m[15][15]
no es
Citar
char **m;

El primero es una matriz asignados contiguamente, lo segundo es un puntero para puntero (? para arreglo) de char. Pero, el puntero debe apuntar para una memoria asignada por 'malloc'

Mi español no es muy bueno, pero, lamento no ser capaz de explicar mejor

Para leer más tarde:
http://foro.elhacker.net/programacion_cc/duda_con_arreglo_bidimensional_dinamico_en_ide_devc-t337905.0.html;msg1658904#msg1658904


En línea

Estoy aprendiendo español, y tu estas aprendiendo programación
neo_from_cs_matrix

Desconectado Desconectado

Mensajes: 35


Ver Perfil
Re: duda doble puntero char a matriz de char
« Respuesta #2 en: 5 Septiembre 2011, 03:32 am »

grax
y aparte el memset no anda bien de esta forma

Código:
// memset(mVector, 0, sizeof(char)*(filas*columnas));//no sirve para la asignacion de memoria anterior!!!!!!!

el memset debe aserse por partes tmb ?

En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: duda doble puntero char a matriz de char
« Respuesta #3 en: 5 Septiembre 2011, 03:53 am »

En el primer programa la llamada a "memset" es correcta, el problema como ya te indicaron se debe a la forma en que tratas de acceder al bloque de memoria.

Si reservas un solo bloque por supuesto basta con una sola llamada a "memset", si reservas varios pues, varias llamadas.

Pero si, como sugiere el programa, lo primero que haces es asignarles un valor a cada elemento del bloque no es necesaria la llamada (o llamadas, según el caso) a esa función.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
martiz de char doble puntero
Programación C/C++
neo_from_cs_matrix 2 6,299 Último mensaje 15 Julio 2011, 00:05 am
por rir3760
Problema: Tamaño de Puntero char
Programación C/C++
yovaninu 8 6,022 Último mensaje 16 Agosto 2011, 14:56 pm
por Gallu
ERROR excepcion: char* = char* + n « 1 2 »
Programación C/C++
x64core 10 5,532 Último mensaje 21 Enero 2012, 20:20 pm
por Eternal Idol
Lectura de matríz de char como char** o DWORD*
Programación C/C++
david_BS 3 3,209 Último mensaje 20 Febrero 2012, 20:49 pm
por Eternal Idol
Pasar matriz char a una función como referencia
Programación C/C++
KISKE 2 7,227 Último mensaje 18 Junio 2013, 13:07 pm
por KISKE
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines