構造体

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
りょう

構造体

#1

投稿記事 by りょう » 18年前

 このプログラムの誤っている箇所を修正し、説明する。
また、このプログラムを実行させた場合、駄々しく動作しない。
どうような結果になることが予想されるか記述する。

#include<stdlib.h>

typedef struct{
char m_ch;
int m_n;
}MyType;

void main(void)
{
MyType *p=(MyType *)malloc(sizeof(char) + sizeof(int));
if(p){
p->m_ch = 'a';
p->m_n = 100;
free(p);
}
}

ここでの誤りは、
     MyType *p=(MyType *)malloc(sizeof(char) + sizeof(int));
                 ↓
     MyType *p=(MyType *)malloc(sizeof(MyType));
となるのはわかります。
 しかし、説明となるとまとめることができません。
nバイトアライメントやパディングなどをどういう風に使えばいいんでしょうか?

なぎ

Re:構造体

#2

投稿記事 by なぎ » 18年前

まずは、「nバイトアライメント」と「パディング」の定義を書いてみるのが吉かなとも思います。
多分、それからでしょう。

toyo

Re:構造体

#3

投稿記事 by toyo » 18年前

構造体のメンバ変数は同じサイズ(nバイト)に揃えた(アライメント)方が扱いやすいと言うことです。

keichan

Re:構造体

#4

投稿記事 by keichan » 18年前

#本件とは全く関係ありませんが

アライメント されていないとデータを(正常に)取得できない処理系も存在する。
と聞いたことがあります。

なぎ

Re:構造体

#5

投稿記事 by なぎ » 18年前

> アライメント されていないとデータを(正常に)取得できない処理系も存在する。

古い話ですが、モトローラの MC68000 は、16bit のデータが整数アライメント(偶数番地境界)にないと、バスエラーでこけていました。
これはもう、プロセッサレベルのお話です。

閉鎖

“C言語何でも質問掲示板” へ戻る