構造体 – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

構造体

固定ページ 2 / 2

ぱふ
 ぱふ
(@ぱふ)
ゲスト
結合: 23年前
投稿: 5
 

#include <stdio.h>

void main(void)
{
float c,d;
scanf(%f, &d);
c = d+1.0;
printf(%f\n,c);
}

こうしたらランタイムエラーは発生しませんでした。

WIN2000SP2 VC++6.0SP4


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

追加情報です。

http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B37507


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 24年前
投稿: 217
 

kazuma 2003/02/05(水) 09:59:49

の発言についてです。

> Release 版でビルドするとエラーメッセージが出るみたいです。

これだと、「Debug 版ではエラーにならなくて、Release 版だとエラーになる」
というふうに受け取れてしまいますね。

紛らわしいので以下のように訂正します。
「Release 版でビルドすると、
 コンソールにエラー番号とエラーメッセージが表示されました。」

Windows2000 SP3, VC++ 6.0 SP5


返信引用
c
 c
(@c)
ゲスト
結合: 23年前
投稿: 9
 

>> struct CPU{
>> char name[8];
>> int syuuhasuu;
>> double chokkei;
>> double takasa;
>> };

>この場合、chokkeiが境界に引っかかります
これって本当に引っかかるんですか.
>0x0 0x4 0x8 0x10
>※便宜上オフセットで書いています
これって演算処理をしやすいようにコンパイラが意図して
領域を確保しているんじゃないんですか
実際自分が思い描いた領域が確保したいんなら
vc++の場合、構造体メンバのアライメントを1バイトにしたら
確保できますよ
間違っていたらすみません


返信引用
SSA
 SSA
(@SSA)
ゲスト
結合: 23年前
投稿: 2
 

既に解決されてますが、昨年末に別の掲示板でも同様の投稿がありましたので、一応そのリンク
を。
http://forums.belution.com/ja/cpp/000/006/23.shtml

それから、cさんの補足って感じですが…
ユーザが特にアラインメントを指定していない限り、通常、コンパイラは自動的に4バイトや
8バイト境界へのアラインメントを行ってくれます。
よって、ユーザはアラインメントを特に意識することなく、double型などのデータも扱うこと
が出来ます。

# 独自にメモリ管理をやりだすと、自分でしっかり意識しないといけない問題ですが… GCとか


返信引用
c
 c
(@c)
ゲスト
結合: 23年前
投稿: 9
 

すみませんはずしてましたね
実行して見て意味がわかりました。


返信引用
固定ページ 2 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました