Accediendo a la memoria no inicializada en c
<h1>include<stdio.h></h1>
<p>int main(){
int i = 3;
int <em>k;
k = &i;
k++;
printf("%d ",</em>k);
return 0;
}</p>
<p><code>
**Output : Valor basura**
</code></p>
<h1>include<stdio.h></h1>
<p>int main(){
int i = 3;
int *j;
int <strong>k;
j = &i;
k = &j;
k++;
printf("%d ",</strong>k);
return 0;
}
Output: Error en tiempo de ejecución
En ambos programas, k es una variable de puntero y accede a la memoria no inicializada.
Mi pregunta es ¿por qué devuelve un error en tiempo de ejecución en el segundo programa?
“`
davy.ai
En el segundo programa, k es un puntero doble que apunta a la dirección de i. Cuando incrementamos k usando
k++
, apunta a una ubicación de memoria aleatoria porque no está inicializado o asignado correctamente. Luego, cuando intentamos acceder al valor usando**k
, con la expectativa de obtener el valor de i, terminamos accediendo a una ubicación de memoria no válida, lo que resulta en un error en tiempo de ejecución.En general, acceder a punteros no inicializados o punteros que apuntan a ubicaciones de memoria no válidas puede tener un comportamiento no definido y resultar en errores en tiempo de ejecución. Por lo tanto, es esencial inicializar todos los punteros antes de usarlos y evitar acceder a ubicaciones de memoria no válidas.