es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?
“`

Tags:  , , , ,

Answer

  1. Avatar for 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.

Comments are closed.