🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #7343

Re: strcat() en c++

#7343
From: Michael
Date: Sun, 09 Mar 2003 21:10
43 lines
3042 bytes
Hi,

El programa que has pegado tiene varios errores:

-------------------8<---------8<------------------
>         cad1=(char*)malloc(20*sizeof(char*));
>         cad2=(char*)malloc(20*sizeof(char*));
Estas dos lineas deberian ser (sobra el *)
cad1=(char*)malloc(20*sizeof(char));
cad2=(char*)malloc(20*sizeof(char));          
-------------------8<---------8<------------------
>         cad1="";
Esto no se puede hacer, has hecho que cad1
apunte a una cadena vacia, has perdido la referencia
a la memoria que pediste con malloc mas arriba.
Tendria que ser algo asi:
*cad1= (char)0;  "o"  cad1[0]= (char)0; "o" cad1[0]= '\0';


>                 strcat(cad1,cad2); //aparentemente es en esta l�ne
Strcat no redimensiona
la zona de memoria a la que apunta cad1 para a�adirle
la cadena de cad2, debes asegurarte antes de hacer el strcat
de que cad1 apunta a una zona de memoria suficientemente
grande para que quepa el contenido de cad1 mas el contenido de cad2.
Como cad1 apunta a una zona de 20*4 bytes, si cad1+cad2 ocupa mas de 20*4 
bytes te dara un error de violacion.
En tu ejemplo original ni siquiera eso ya que debido a la linea
cad1="";  cad1 ni siquiera apunta a la zona de 20*4 caracteres
de memoria reservada con malloc , sino que apunta a una zona 
de memoria en la que solo cabe un caracter.

> Pero falta todav�a lo mejor y mas contradictorio que jamas he visto!!!!
> basta que establezca alg�n punto de interrupci�n en cualquier parte del
> c�digo, donde mas me de la gana y el bendito programa funciona!!!!!, qu�
> creen que est� mal, como puedo arreglarlo?????

El problema es que el programa esta escribiendo en zonas de memoria en las 
que no caben los datos luego segun en que zona sobreescriba puede dar el 
error o no (depende de que lo que machaque en ese momento sea necesario 
para el funcionamiento del programa).

Salud2 !!!!
Technical Details
Message-ID: <b4g7fc$gg9$1@nsnmrro2-gest.nuria.telefonica-data.net>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!easynet-quince!easynet.net!bashful.rediris.es!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mail
References: <b453rv$6ma$1@julieta.escomposlinux.org>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: f86c8,aff69d8b36562df0
X-Google-Attributes: gidf86c8,public
X-Google-ArrivalTime: 2003-03-09 12:16:46 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!easynet-quince!easynet.net!bashful.rediris.es!nsnmrro1-lo.nuria.telefonica-data.net!nsnmrro2-lo.nuria.telefonica-data.net!not-for-mail
From: Michael <michaell@teleline.es>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: strcat() en c++
Date: Sun, 09 Mar 2003 21:10:34 +0000
Organization: Michael Corp
Lines: 44
Message-ID: <b4g7fc$gg9$1@nsnmrro2-gest.nuria.telefonica-data.net>
References: <b453rv$6ma$1@julieta.escomposlinux.org>
NNTP-Posting-Host: 213-98-127-85.uc.nombres.ttd.es
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8Bit
X-Trace: nsnmrro2-gest.nuria.telefonica-data.net 1047241004 16905 213.98.127.85 (9 Mar 2003 20:16:44 GMT)
X-Complaints-To: usenet@nsnmrro2-gest.nuria.telefonica-data.net
NNTP-Posting-Date: Sun, 9 Mar 2003 20:16:44 +0000 (UTC)
User-Agent: KNode/0.7.1