#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 2003/02/05(水) 09:59:49
の発言についてです。
> Release 版でビルドするとエラーメッセージが出るみたいです。
これだと、「Debug 版ではエラーにならなくて、Release 版だとエラーになる」
というふうに受け取れてしまいますね。
紛らわしいので以下のように訂正します。
「Release 版でビルドすると、
コンソールにエラー番号とエラーメッセージが表示されました。」
Windows2000 SP3, VC++ 6.0 SP5
>> struct CPU{
>> char name[8];
>> int syuuhasuu;
>> double chokkei;
>> double takasa;
>> };
>この場合、chokkeiが境界に引っかかります
これって本当に引っかかるんですか.
>0x0 0x4 0x8 0x10
>※便宜上オフセットで書いています
これって演算処理をしやすいようにコンパイラが意図して
領域を確保しているんじゃないんですか
実際自分が思い描いた領域が確保したいんなら
vc++の場合、構造体メンバのアライメントを1バイトにしたら
確保できますよ
間違っていたらすみません
既に解決されてますが、昨年末に別の掲示板でも同様の投稿がありましたので、一応そのリンク
を。
http://forums.belution.com/ja/cpp/000/006/23.shtml
それから、cさんの補足って感じですが…
ユーザが特にアラインメントを指定していない限り、通常、コンパイラは自動的に4バイトや
8バイト境界へのアラインメントを行ってくれます。
よって、ユーザはアラインメントを特に意識することなく、double型などのデータも扱うこと
が出来ます。
# 独自にメモリ管理をやりだすと、自分でしっかり意識しないといけない問題ですが… GCとか
すみませんはずしてましたね
実行して見て意味がわかりました。
