2017-02-05 6 views
-1

構造体の配列の合計バイト数を取得しようとしています。 1つの構造体の合計バイトは96バイトです。私は最初にパディングされたバイトを避けるためintを配置します。私は実際に何をしているのかは分かりませんが、ここで貼り付けたサンプルに基づいてstruct [MAX]を割り当てるのは96バイト* 50になります。私は約700万バイト、またはいくらかのゴミ値を取得します。誰でも私はstruct address addr[MAX]の額を計算するのを助けることができるMAX = 50。ここに完全なサンプルがあります。みんなありがとう!あなたはADDRから構造を割り当てられ、このラインと構造体配列のサイズを正しく計算するにはどうすればよいですか?私はこの権利をしていますか?

#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を必要としない?と割り当てポインタ?したがって、完全な構造体配列の合計バイト数は、次のようになります: '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

[編集] ok私はそれを削除し、コメントとして投稿しました。どうもありがとうございました!私はちょうどメモリ管理についてまともな把握をしたい。私は、メモリとプロセッサで何が起こっているのか理解せずにプロジェクトを書くことは望まない。私は同時にx86 asmも学んでいます。これをクリアしてくれてありがとう。 – Soundview

+0

@EdHeal:sizeofはintではなくsize_tを与えます。したがって、値をキャストするか%iを変更する必要があります。 –

+0

私はあなたの変更から正しい計算を得ました。ありがとう。私はまずそれを紙でやった。 Size_tは私が信じるジェネリックintです – Soundview

0
struct address addr[MAX] 

[0]でaddrする[49]

関連する問題