Digamos que tenemos el siguiente código:
int func(char str[], int len) {
// Don't return anything here.
}
int main() {
char str[] = "Hello";
int result = func(str, strlen(str));
printf("%d\n", result);
}
Imprimirá un valor de cadena -1679929632 en mi computadora. Y cambia de vez en cuando cuando ejecuto.
¿Alguien puede explicar por qué sucede esto?
Si no aparece ninguna instrucción de retorno en la definición de una función, el control vuelve automáticamente a la función de llamada después de ejecutar la última declaración de la función llamada. En este caso, el valor de retorno de la función llamada es indefinido. Si no se requiere un valor de retorno, declare la función para que tenga un tipo de retorno nulo; de lo contrario, el tipo de retorno predeterminado es int.
Como se mencionó anteriormente, no está definido, por lo que encontrar la causa raíz detrás de algún valor aleatorio como retorno será inútil.
Es un comportamiento indefinido. Podría ser cualquier cosa o estrellarse.
– Ninja retirado
21 de enero de 2015 a las 5:10
¿Se lee este valor de StackFrame? ¿De qué valor potencial es esto? ¿Alguna variable local o dirección de retorno?
– Bill Randerson
21 de enero de 2015 a las 5:11
Esto puede ayudarlo a comprender: stackoverflow.com/questions/12376461/… El valor es generalmente lo que sea que esté en el registro que se usa para devolver un valor de ese tipo.
– Ninja retirado
21 de enero de 2015 a las 5:14
Entonces, básicamente, la persona que llama simplemente intenta leer algún registro como valor de retorno, y la persona que llama no tiene ningún conocimiento de si la persona que llama realmente devuelve algo o no. ¿Derecha?
– Bill Randerson
21 de enero de 2015 a las 8:39