¿Por qué obtengo “valor nulo no ignorado como debería ser”?

4 minutos de lectura

avatar de usuario
a B C

tengo la siguiente función:

void getdata(int arr[], int n)
{

    for (int i = 0; i < n; i++) 
    {
        int a = srand(time(NULL));
        arr[i] = a;
    }
}

Y lo llamo main:

getdata(arr, 1024);

Obtengo “valor nulo no ignorado como debería ser”, pero no entiendo qué está mal. ¿Por qué recibo este error?

  • no inicialice el PRNG una y otra vez. Una vez por ejecución del programa es suficiente.

    – pmg

    17 de enero de 2012 a las 14:28

  • ¿Cómo se declara arr? ¿Qué error obtienes? ¿De qué valor vacío estás hablando?

    –Paul Tomblin

    17 de enero de 2012 a las 14:28

  • ¿Estás haciendo algo como x = getdata(arr,1024) ?

    – parapura rajkumar

    17 de enero de 2012 a las 14:28

  • Te falta un punto y coma. Por favor, prefiera copiar/pegar su código en lugar de escribirlo de nuevo.

    – pmg

    17 de enero de 2012 a las 14:31

  • NOTA: si está tratando de pasar arr como un VLA (arreglo de longitud variable), debe declarar void getdata(int n, int arr[n]) {...}

    – Jamie Paté

    19 de diciembre de 2017 a las 23:45

avatar de usuario
pmg

  int a = srand(time(NULL));

El prototipo para srand es void srand(unsigned int) (siempre que haya incluido <stdlib.h>).
Esto significa que no devuelve nada… pero está utilizando el valor que devuelve (???) para asignar, por inicialización, a a.


Editar: esto es lo que tienes que hacer:

#include <stdlib.h> /* srand(), rand() */
#include <time.h>   /* time() */

#define ARRAY_SIZE 1024

void getdata(int arr[], int n)
{
    for (int i = 0; i < n; i++)
    {
        arr[i] = rand();
    }
}

int main(void)
{
    int arr[ARRAY_SIZE];
    srand(time(0));
    getdata(arr, ARRAY_SIZE);
    /* ... */
}

  • ¿Cómo puedo asignar arr?[i] = srand(tiempo(NULO))

    – a B C

    17 de enero de 2012 a las 14:44

  • srand(tiempo(NULL)) arr[i] = rand() % 100 ¿cuál es la función srand aquí?

    – a B C

    17 de enero de 2012 a las 14:51

  • @mertmetin rand devuelve un entero aleatorio en [0,RAND_MAX]. srand simplemente inicializa el generador de números aleatorios. Este generador es todo menos aleatorio (en realidad es un generador de números pseudo-radom). Con srand lo inicializas con algún valor inicial. Por el mismo valor semilla las siguientes llamadas a rand dará la misma secuencia de números. Entonces llamando srand una vez al inicio (o antes de llamar getdata con algún valor más o menos aleatorio (en este caso basado en la hora actual) hace lo siguiente rand llamadas diferentes cada vez que se ejecuta el programa.

    – Christian Raú

    17 de enero de 2012 a las 15:07

  • @mertmetin Pero llamando srand cada vez antes rand es una mala idea, en cuanto al mismo valor pasado a srand, rand devolverá el mismo valor. Aunque trae la hora actual aquí, sigue siendo una mala idea. Lea los enlaces en mi comentario a la otra respuesta para obtener más información sobre este asunto.

    – Christian Raú

    17 de enero de 2012 a las 15:09

  • void value not ignored as it ought to be: ¿por qué ese mensaje de error críptico? ¿Por qué no simplemente void value cannot be assigned to non-void variable?

    – pmor

    8 de febrero de 2021 a las 22:13


avatar de usuario
jamin gris

El cartel original cita un mensaje de error del compilador de GCC, pero incluso al leer este hilo, no está claro que el mensaje de error se haya abordado correctamente, excepto por la respuesta de @pmg. (+1, por cierto)


error: valor nulo no ignorado como debería ser

Este es un mensaje de error de GCC que significa que el valor de retorno de una función es ‘vacío’, pero que está tratando de asignarlo a una variable no vacía.

Ejemplo:

void myFunction()
{
   //...stuff...
}

int main()
{
   int myInt = myFunction(); //Compile error!

    return 0;
}

No está permitido asignar void a números enteros o de cualquier otro tipo.

En la situación del OP:

int a = srand(time(NULL));

…No se permite. srand(), según la documentacióndevoluciones vacío.

Esta pregunta es un duplicado de:

  • error: valor nulo no ignorado como debería ser
  • “valor nulo no ignorado como debería ser” – Qt/C++
  • Error de compilación de GCC C, valor nulo no ignorado como debería ser

Respondo, a pesar de que está duplicado, porque este es el resultado principal en Google para este mensaje de error. Debido a que este hilo es el resultado principal, es importante que brinde un resultado sucinto, claro y fácil de encontrar.

srand no devuelve nada por lo que no puede inicializar a con su valor devuelto porque, bueno, porque no devuelve un valor. quisiste llamar rand ¿así como?

  • @mertmetin Entonces no llames srand pero rand! ¿Entendido?

    – Christian Raú

    17 de enero de 2012 a las 14:47


    int a = srand(time(NULL))
        arr[i] = a;

Debiera ser

        arr[i] = rand();

Y pon srand(time(NULL)) en algún lugar al principio de su programa.

“valor nulo no ignorado como debería ser” este error ocurre cuando una función como srand(time(NULL)) no devuelve algo y usted lo está tratando como si estuviera devolviendo algo. Como en el caso de la función pop() en la cola, si almacena el elemento emergente en una variable, obtendrá el mismo error porque no devuelve nada.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad