1. ホーム
  2. c

[解決済み] メモリ確保時に「イニシャライザ要素が定数でない」というエラーが発生する。

2022-03-04 12:48:03

質問

  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 } 

コンパイルエラーです。

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

簡単なリンクリストのプログラムに挑戦しています。まだ完全に完成していません。コンパイルエラーになるんです。なぜこうなるのか理解できませんでした。

どうすればいいですか?

を定義しているので head 基本的には、コンパイラやリンカは実行ファイルにそのイニシャライザのための領域を確保し、イニシャライザをその領域に書き込んで完了することができるはずです。を呼び出すための規定はありません。 malloc 初期化の際には、上記のように main (から呼び出すもの)。 main ).

#include <stdlib.h>

void init() { 
    head = malloc(sizeof(node));
}

int main() { 
    init();
    // ...
}

この場合、あなたが持っているコードは main を実際に使用することはありません。 head とはいえ、上記はすべて省略しても問題ないでしょう。