2013-11-15 5 views
2

Ниже ошибка, что он дает мне и мой код:Вложенные структуры массива в C

workspace.c: В функции «главный»:

workspace.c: 38: ошибка: индексируются значение является ни массив, ни указатель

workspace.c: 39: ошибка: индексируются значение не является ни массивом, ни указатель

любой вход будет весьма признателен! и спасибо вам за то время.

#include <stdio.h> 
#include <stdbool.h> 
#include <stdlib.h> 
#include <sys/types.h> 
#include <string.h> 
#include <dirent.h> 
#include <sys/time.h> 
#include <fcntl.h> 

#define n 4 
struct process 
{ 
    struct segment{ 

     struct page 
     { 
      int pid; 
      int p[4]; 
     }pages; 
    }segments; 
}; 

struct process processes[3]; 
struct page pages[n]; 
struct segment segments[n]; 

int main() 
{ 
    int a, b, c; 
    int k = 0; 
    for(a = 0; a < 3; a++) 
    { 
      for(b = 0; b < 4; b++) 
     { 
      for(c = 0; c < 4; c++) 
      { 
       k++; 
       processes[a].segments[b].pages[c].pid = k; 
       printf("Segment: %d, Page: %d, PID: %d\n",a,b,processes[a].segments[b].pages[c].pid); 
      } 
     } 

} 

return 0; 
} 
+0

'# define'ing что-то, как короткий, как ** п ** немного опасно, так как это может привести к замещениям, которые вы не предполагали. Традиция 'C' состоит в том, чтобы использовать весь верхний регистр и что-то описательное, например' #define MAX_PAGES 4' –

ответ

0

Смотреть этот код: Tested with no error

#define n 4 
struct process 
{ 
    struct segment{ 

     struct page 
     { 
      int pid; 
      int p[4]; 
     }pages[n]; 
    }segments[n]; 
}processes[3]; 


int main() 
{ 
    int a, b, c; 
    int k = 0; 
    for(a = 0; a < 3; a++) 
    { 
     for(b = 0; b < 4; b++) 
     { 
      for(c = 0; c < 4; c++) 
      { 
       k++; 
       processes[a].segments[b].pages[c].pid = k; 
       printf("Segment: %d, Page: %d, PID: %d\n",a,b,processes[a].segments[b].pages[c].pid); 
      } 
     } 

    } 

    return 0; 
} 
+0

Спасибо Габриэль и Мах за вашу помощь. Я исправил код. И спасибо Стивену за вход. Я изменю свое соглашение об именах, когда я #define в следующий раз. – Key

+0

@ Похоже, вы пошли туда и обратно, решив, какой ответ принять. Было бы неплохо, если бы вы не согласились с тем, что вы не принимаете его, потому что можете принять его. Рад, что вам нужна помощь. – mah

0

Ваш segments элемент показан только как единая структура. Ваша диаграмма (и как вы, кажется, намерены использовать его) предполагает, что это должен быть массив из них, как:

struct process 
{ 
    struct segment{ 

     struct page 
     { 
      int pid; 
      int p[4]; 
     }pages; 
    }segments[4]; // <-------- [4] 
}; 

Вы также объявляющего:

struct page pages[n]; 
struct segment segments[n]; 

, который вы никогда не использовать ... вы (по праву, я думаю) используем их родственников в вашей структуре процесса. (Это также означает, что вы не обращая внимания на #define п, эффективно)

Смежные вопросы