<div dir="ltr">Hola Facundo,<div class="gmail_extra"><br><div class="gmail_quote">2014-04-24 18:57 GMT-04:00 Facundo Curti <span dir="ltr"><<a href="mailto:facu.curti@gmail.com" target="_blank">facu.curti@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hola gente. Hace un tiempo que sigo la lista, pero este es mi primer<br>

mensaje. :) La cuestión es que tengo una duda sencilla y corta jaja.<br>
<br></blockquote><div><br></div><div>Bienvenido (con retraso) :)</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

Yo tenia entendido, que al guardar una cadena en un char*, se podrían<br>
pisar datos de otras variables. Sin embargo un amigo me dice que no.<br>
¿Alguien podría desempatarnos? jaja. Y sobre todo saber el por que<br>
pasa o no pasa esto.<br></blockquote><div><br></div><div>Depende de las operaciones que manejan tal cadena o el mismo puntero. Por ejemplo,</div><div><br></div><div>char *psz = new char[5];</div><div><br></div><div>psz[0] = 'H';</div>
<div>psz[1] = 'o';<br></div><div>psz[2] = 'l';<br></div><div>psz[3] = 'a';<br></div><div>psz[4] = '\0';<br></div><div><br></div><div>Aquí no pisamos a nadie; pero si hacemos esto:<br><br>psz[5] = '9';<br>
</div><div><br></div><div>entonces ya estamos accediendo a memoria que realmente no nos pertenece. El sistema operativo puede denegarnos el acceso - tanto si es de lectura como si es de escritura.</div><div><br></div><div>
Ahora bien, a veces nos interesa rebasar el tamaño original. Por ejemplo, usando 'malloc()',</div><div><br></div><div>struct Array<br>{<br>  int nCantidad;</div><div>  int aEnteros[1];<br>};</div><div><br></div><div>
Array *pLista = (Array *) malloc( sizeof(Array) + 31*sizeof(int) );</div><div><div><br></div><div>pLista->nCantidad = 32;</div></div><div><div>pLista->aEnteros[0] = -93;</div></div><div><br></div><div>Ahora podemos acceder a varios enteros más allá del primero; por ejemplo,</div>
<div><br></div><div><div>pLista->aEnteros[1] = 198;</div></div><div><div>pLista->aEnteros[2] = -443;</div></div><div>...</div><div><br></div><div>Podemos rebasar el índice de 0 (cero) porque creamos dinámicamente una cantidad mayor de memoria para 'Array': hemos creado memoria para 'Array' y para 31 enteros más. Y así, aprovechamos el hecho de que podemos rebasar el array. Obviamente, podemos hacer esto, porque previamente garantizamos que la memoria accedida fuese adjudicada a nuestro programa.</div>
<div><br></div><div>En general, tienes que garantizar que la memoria que vayas a acceder debe estar reservada al programa.</div><div><br></div><div><br></div><div>Espero que esto te oriente.</div><div><br></div><div>Steven</div>
<div><br></div></div></div></div>