por - leer y escribir en un mundo cambiante bibliografia
¿Cómo podría ser posible leer y escribir más allá de la matriz (3)
Al leer y escribir más allá de la matriz, su programa invoca un comportamiento indefinido. No significa que tenga que colgarse o imprimir valores basura, puede pretender funcionar bien. Aparentemente, eso es lo que está sucediendo en este caso.
Salida del programa:
#include <stdio.h>
int main()
{
int size;
printf("Enter the size of array: ");
scanf("%d",&size);
int b[size],i = 0;
printf("Enter %d integers to be printed: ",size);
while(i++ < size)
{
scanf("%d",&b[i]);
printf("%d %d/n", i, b[i]);
}
return 0;
}
para size = 5
y números de entrada:
0 1 2 3 4
es
1 0
2 1
3 2
4 3
5 4
donde la primera columna es para i
segunda para los elementos de la matriz b
.
Está claro que i
en el ciclo while(i++ < size) {
incrementado a 1
antes de ingresar al ciclo. Este ciclo debería tener que almacenar / imprimir el valor en / de b[1], b[2], b[3], b[4]
pero no b[5]
ya que el ciclo terminará en i = 5
.
¿Cómo este código está imprimiendo el valor de b[5]
?
Lo he probado para diferentes size
matriz y no está imprimiendo ningún valor de basura.
En su ciclo, la condición i < size
se verifica antes de que se incremente. Pero, i
se incrementa antes de ingresar al cuerpo del ciclo y no después, por lo que es posible acceder a b[5]
en este caso, ya que se incrementaría después de verificar i < size
con i=4
. No quieres eso, ya que esto provoca un comportamiento del programa indefinido.
Si intenta acceder a un elemento de la matriz que no existe, p. Ej. array[size]
, está accediendo al siguiente punto en la memoria justo después de la matriz. En este caso, tiene suerte, pero si esto significaba que estaba accediendo a una parte de la memoria donde su programa no está permitido hacerlo, obtendría un segmentation fault
.
podrías usar un ciclo for en lugar de un rato así que en lugar de while(i++<size)
podrías usar for(i = 0; i < size; i++)
que debería resolver tu problema, amigo mío :)