1 #include<stdio.h>
  2 #include<malloc.h>
  3 
  4 typedef struct node_t{
  5     int i;
  6     struct node_t* link;
  7 }node;
  8 
  9 node* head = (node *)malloc(sizeof(node));
 10 
 11 if(head == NULL){
 12     printf("\n malloc for head node failed! \n");
 13 }
 14 
 15 int main(){
 16     int i = 10;
 17     node* temp = NULL;
 18     temp = (node *)malloc(sizeof(node));
 19     if(temp == NULL){
 20         printf("\n malloc for temp node failed! \n");
 21     }
 22     else{
 23         while(i<=10){
 24             ;
 25         }
 26     }
 27     return 0;
 28 } 

error de compilación:

linked.c:9:1: error: initializer element is not constant
linked.c:11:1: error: expected identifier or ‘(’ before ‘if’

Estoy tratando de ser una simple lista enlazada programa. No está completamente terminada. Estoy recibiendo un error de compilación. No podía entender por qué sucedió esto.

InformationsquelleAutor Angus | 2012-11-29

4 Comentarios

  1. 8

    Ya que se está definiendo head como global, su inicializador debe ser una constante, básicamente, el compilador/enlazador debe ser capaz de asignar espacio para él en el ejecutable, escribir el inicializador en el espacio, y será hecho. No existe ninguna disposición para llamar malloc como hemos hecho anteriormente durante la inicialización, deberá hacerlo dentro de main (o algo que se llame de main).

    #include <stdlib.h>
    
    void init() { 
        head = malloc(sizeof(node));
    }
    
    int main() { 
        init();
        //...
    }

    En este caso, el código en main en realidad nunca utiliza head aunque, por lo que puede ser capaz de saltar todo lo anterior sin problema.

  2. 7
     9  node* head = (node *)malloc(sizeof(node));
     10 
     11 if(head == NULL){
     12     printf("\n malloc for head node failed! \n");
     13 }

    Estas líneas no son posibles fuera de la main() debido a que cualquier llamada a la función o ejecutable debe estar dentro de la main() función o cualquier función de llamada de principal.

    Para linked.c:9:1: error: initializer element is not constant

    Sólo las definiciones de función o de cualquier global de inicialización es posible fuera de main() pero inicializador debe ser expresión de la constante de`.

    Puede declarar la head como global, pero la inicialización está mal.

    Hacerlo así :

    node * head =NULL //here initialization using constant expression
    
    
    void function () //any function 
    {
     head = malloc(sizeof(node));
    }

    Para linked.c:11:1: error: expected identifier,

    if la declaración no puede ser fuera de cualquier función.
    En su caso , poner estas líneas dentro de main y problema resuelto

  3. 3

    head es una varibale. Globales y estáticas varibales debe ser inicializado por expresiones constantes, es decir, los literales. así que usted no puede hacer

    node* head = (node *)malloc(sizeof(node));
  4. 0

    No puede usar malloc() en el ámbito global.
    o
    usted puede hacer como sigue

    #include<stdio.h>
    #include<malloc.h>
      :
    node* head
      :
      :
    int main(){
      :
      :
    head = (node *)malloc(sizeof(node));
      :
      :
    }
    • es mejor incluir <stdlib.h> lugar <malloc.h>

Dejar respuesta

Please enter your comment!
Please enter your name here