[C con Clase] Error: Fallo de segmentación

Steven R. Davidson vze266ft en verizon.net
Mar Ene 29 20:03:40 CET 2008


Hola Programante y José Luis,

Sdlo quiero agregar a lo que ya ha explicado Programante.

Programante wrote:
> Jose Luis escribió:
> 
> Devolver el mismo puntero resulta (en ocasiones) cómodo y se usa en 
> diversas funciones estándar, por lo que no es extraño usarlo también.
> 

Exacto. Esta comodidad es aparente cuando queremos "encadenar" 
funciones. Por ejemplo,

int *func( int *p, double r );
int *g( int *p, int n, char *cad );
void mostrar( int *p, int n );

Podríamos hacer lo siguiente,

mostrar( func( g(ptr,10,0), 2.3e-95 ), 10 );

Si los prototipos anteriores no retornaran el mismo puntero, entonces 
estaríamos forzados a invocar cada función en diferentes sentencias; 
esto sería,

g( ptr, 10, 0 );
func( ptr, 2.3e-95 );
mostrar( ptr, 10 );

Retornando el mismo puntero nos permite expresar las sentencias 
anteriores de cualesquiera de las dos formas, pero si no, entonces sólo 
tenemos la forma anterior - por separado.

>>y para terminar (lamento mi torpeza) tampoco logro entender la 
>>utilidad del parámetro nCant en el segundo caso.
>>
> 
> Yo tampoco.

[CORTE]

> Ahora, ¿para qué necesita esa función un parámetro nCant?

Esto proviene de un ejemplo que di en un mensaje anterior. Dije que,

"...también podríamos aceptar otro parámetro para indicar la cantidad 
máxima de caracteres que podemos guardar en esta cadena. Por ejemplo,

char * DectoBase( TIPO1 numdec, TIPO2 base, char *numbase, int nCant )
..."

Reiterando, 'nCant' sirve para indicar la cantidad máxima para la 
cadena. Por ejemplo,

char szNumbase[50];
...
cout << DectoBase( 45763, 16, szNumbase, 50 );

La implementación de esta función garantizaría que no copiaría más de 49 
caracteres a 'szNumbase' y además agregaría el carácter nulo al final de 
la cadena.

No expliqué esta última parte porque pensé que era evidente. Al fin y al 
cabo estamos manipulando cadenas de caracteres, y por tanto no queremos 
"meter la pata" rebasando la máxima en tal cadena.


Espero haber aclarado las dudas.

Steven






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