2017-02-05 2 views
-1

Я пытаюсь получить общее количество байтов массива структур. Общие байты 1 структуры составляют 96 байт. Сначала я помещал int, чтобы избежать заполнения байтов. Я действительно не знаю, правильно ли работает то, что я делаю, но я знаю, что выделение struct [MAX] будет 96 байт * 50 на основе образца, который мы вставили здесь. я получаю около 7 миллионов байт или некоторую стоимость мусора. Любой может помочь мне рассчитать в коде сумму struct address addr[MAX] где MAX = 50. Вот полный образец. Спасибо, парни!Как правильно рассчитать размер массива struct? Правильно ли я это делаю?

#include <stdio.h> 
#include <stdlib.h> 


#define MAX 50 //for structure 

struct address { 
    int zip; // 4 bytes 
    char name[20];  // 20 bytes 
    char street[40]; // 40 bytes 
    char city[16];  // 16 bytes 
    char state[4];  // 4 bytes 
    char country[10]; // 10 bytes 
}; 

int main() 
{ 
    struct address addr[MAX]; 
    unsigned int *allocation; 
    allocation = malloc(MAX * sizeof(struct address)); 

    if (!allocation) { 
     printf("Memory allocation error\n\n"); 
     exit(1); 
    } else { 
     printf("address start: 0x%x08 - size in bytes: %d\n", &addr, sizeof(struct address)); 
     printf("sizeof zip %d\n", sizeof(addr[0].zip)); 
     printf("sizeof name %d\n", sizeof(addr[0].name)); 
     printf("sizeof street %d\n", sizeof(addr[0].street)); 
     printf("sizeof city %d\n", sizeof(addr[0].city)); 
     printf("sizeof state %d\n", sizeof(addr[0].state)); 
     printf("sizeof country %d\n", sizeof(addr[0].country)); 
     printf("total size of structure is %d\n", allocation); 
    } 

    free(allocation); 
    system("PAUSE"); 
    return 0; 
} 
+1

'allocation' является указателем на выделенных данных, а не его размер ... и почему вы выделить структуру, когда она уже выделена в качестве переменной авто? –

+0

Я не знал, что это было выделено. Значит, мне не нужен malloc? и указатель на размещение? Таким образом, чтобы найти общие байты полного массива struct, будет следующим: 'totalBytes = MAX * sizeof (struct address);'? – Soundview

+0

нет, вам это не нужно. –

ответ

1

Эта строка:

printf("total size of structure is %d\n", allocation); 

некорректен, так как allocation является указателем. Для того, чтобы получить общий размер просто сделать следующее:

#include <stdio.h> 

#define MAX 50 //for structure 

struct address{ 
    int zip; // 4 bytes 
    char name[20];  // 20 bytes 
    char street[40]; // 40 bytes 
    char city[16];  // 16 bytes 
    char state[4];  // 4 bytes 
    char country[10]; // 10 bytes 
}; 

int main() 
{ 
    struct address addr[MAX]; 
    printf("Size %zu\n", sizeof(addr)); 
    return 0; 
} 
+0

[edit] ok, я удалил его и разместил как комментарий. Большое спасибо! Я просто хочу получить приличное понимание управления памятью. Я не хочу писать проекты, не понимая, что происходит в памяти и процессоре. Я также изучаю x86 asm одновременно. Спасибо, что прояснил это для меня. – Soundview

+0

@EdHeal: sizeof дает size_t, а не int, поэтому, возможно, вам следует либо присвоить значение, либо изменить% i. –

+0

Я получил правильный расчет из вашего изменения. Благодарю. Сначала я сделал это на бумаге. Size_t является общим int Я считаю – Soundview

0
struct address addr[MAX] 

с этой линии вы выделяемой структуру из адр [0] в адр [49]

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