c言語でプログラミングを行い、コンパイルが通って実行した時に
エラーが出たので、1行ずつコンパイルしてみました。
/////////////////ソース部分//////////////////////////////
a_save[0] = A[0] //(a_save と A は同じ構造体タグ)
a_save[1] = A[1]
a_save[2] = A[2]
/////////////////////////////////////////////////////////
→ここでコンパイルしたときは当然のように
a_save[0].a という変数の値は A[0].a の値と同じ8となっています。
ここからもう少し進んで
/////////////////ソース部分//////////////////////////////
a_save[0] = A[0] //(a_save と A は同じ構造体タグ)
a_save[1] = A[1]
a_save[2] = A[2]
b[0] = B[0] //(b と B は同じ構造体タグ(Aとは別))
b[1] = B[1]
b[2] = B[2]
/////////////////////////////////////////////////////////
→ここでコンパイルしたときに A[0].a の値は8のままだったの
ですが a_save[0].a の値が急に-858993460というような値に
なっていました。
これは何故なのでしょうか?メモリか何かが原因なのでしょうか?
よろしくお願いします。
No.9ベストアンサー
- 回答日時:
すでに完結していますが、
>要素数は全て3以上でグローバル変数となっており宣言ミスなどでは無い
-----------
>struct KOMA koma2_save[2];
>struct KOM kom2_save[2];
要素2個ですね。明らかに宣言ミスです。これでは
>koma2_save[2] = koma2[max_koma3];
を実行した時点で内部的(メモリ的)には破たんしています。
さらに追い打ちをかけることになりますが
>kom2_save[0] = kom2[max_koma1];
>kom2_save[1] = kom2[max_koma2];
>kom2_save[2] = kom2[max_koma3];
ここで使用している「max_koma1~max_koma3」の値は提示されたソースでは「0~29」であると保障できていますか?
この回答への補足
単純なミスをしていました。失礼しました(汗
max_komaの方も0~29になっているか確認しておきます。
ありがとうございました。
No.5
- 回答日時:
No.1です。
やはり、端折られている部分(確認方法など)に問題がありそうですね。
>-858993460
は、単純に16進数に変換した場合「0xCCCCCCCC」となります。
これがどういう意味を持つかというと、Windowsアプリなら「メモリ確保されていない部分を参照している」ということです。
それぞれ構造体ということですが、その構造体自体がポインタであったり、メンバ変数がポインタであったりしませんか?
また、表示方法は本当に正しいか確認してみてください。
No.4
- 回答日時:
>全体を載せるとどうしても入りきらない
では、せめて当該構造体の定義部分と
当該構造体を用いた当該変数の定義部分だけでも
見せてください。
この回答への補足
実際に使っている構造体は次のようになっています。時間割の振り分け
を行うようなプログラムです。
☆の部分ではkoma2_save[0].subject_class_numberの値が8だったのに
★の部分ではkoma2_save[0].subject_class_numberの値が変わって
いました。
// 構造体の定義部分
struct KOMA
{
int subject_number;
int subject_bangou[20];
int subject_stock[20];
int subject_class_number;
int class_bangou[20];
int class_code[20];
int class_stock[20];
int student_number;
int student[170];
int new_subject_class_number;
int new_class_bangou[20];
int new_class_bunkatu[20];
};
struct KOM
{
int student_number[15];
int student[15][40];
int subject_class_number;
int subject_bangou[20];
int subject_class[20];
int subject_class_stock[20];
};
// 変数の定義部分
struct KOMA koma2[30];
struct KOMA koma2_save[2];
struct KOM kom2[30];
struct KOM kom2_save[2];
// 問題部分
// koma2_save にコピーする
koma2_save[0] = koma2[max_koma1];
koma2_save[1] = koma2[max_koma2];
koma2_save[2] = koma2[max_koma3];
☆
// kom2_save にコピーする
kom2_save[0] = kom2[max_koma1];
kom2_save[1] = kom2[max_koma2];
kom2_save[2] = kom2[max_koma3];
★
よろしくお願いします。
No.3
- 回答日時:
コードを載せるときは
はしょらずに全部載せてください。
載せていないところに
問題が隠れていることが
ままあります。
この回答への補足
分かりにくくてすいません。
全体を載せるとどうしても入りきらないので問題の部分をシンプルな形に
して載せています。全て一つのファイルの中でグローバル変数を用いている
ので宣言ミスなどでは無いと思います。また、他の場所で似たような操作
をしても問題なく実行できています。
上の部分では変わっていなかった変数が下までの数行で直接操作して
いなかったにもかかわらず急に変わっていることに疑問を感じています。
コンパイル方法はvc++のカーソル行までコンパイルを用いており、
そのときの変数の値を表示してみました。
No.2
- 回答日時:
これだけで原因が分かると思う方が間違っている.
使っている処理系とか問題が起きる完全な (かつ, できれば最小の) プログラムの例をあげてください.
ついでに言うと, 「構造体タグ」に添え字をつけてこんなことをしようとしてもコンパイラが通してくれないはずです.
この回答への補足
分かりにくくてすいません。
処理系はvc++を使用しています。同じ構造体タグで宣言した変数という
意味です。宣言などにはミスはないと思うので、下のソースは上のソース
の続きなので直接操作にかかわっていない変数の値が変化していることに
疑問を感じています。
No.1
- 回答日時:
とりあえずの確認。
・質問のソース部分は、同じ関数内で連続して記述されていますか?
・a_save[]、A[]、b[]、B[] の要素数はすべて3以上ですか?
・a_save[]、A[]、b[]、B[] をそれぞれ宣言している場所は?
・値がおかしくなるのを確認している方法、また確認したタイミングは?
考えられることとしては、
要素宣言ミスによるメモリ破壊や、ローカル変数を別の関数上から確認しようとしての問題の気がしますが。
この回答への補足
分かりにくくてすいません。
上のソースから連続して下のソースになっています。
それぞれこの次の行までコンパイルしたときの変数の値となっています。
要素数は全て3以上でグローバル変数となっており宣言ミスなどでは無い
ので、直接操作していなかった変数が変わっているのが不思議に思いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/10 14:24
- その他(プログラミング・Web制作) Pythonでエクセルファイルの列を指定してスライス 3 2022/08/28 17:35
- TOEFL・TOEIC・英語検定 it isへの言い換え 2 2022/12/21 08:28
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- 英語 英語のカンマについて教えて欲しいです。 英作文についてです。 例えばお題が 100円ショップを利用す 3 2022/12/31 18:03
- 中学校 Many people want to do something to help save envi 2 2022/06/12 14:06
- 英語 「貯める」という意味のsaveは状態動詞ですか?動作動詞ですか? 5 2022/10/31 18:55
- UNIX・Linux Linux(fedora30)が立ち上がらくなってしまった 1 2023/03/29 11:09
- 英語 I want to save 〈 〉needy people 〈 〉の中には何か必要ですか? 私は貧 1 2023/06/11 14:55
- その他(プログラミング・Web制作) VSCodeの自動保存の2か所を無効にしているのに自動で保存されてしまう 1 2022/10/19 11:31
このQ&Aを見た人はこんなQ&Aも見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
いけず言葉しりとり
はんなりと心にダメージを与える「いけず言葉」でしりとりをしましょう。 「あ」あら〜しゃれた服着てはりますな 遠くからでもわかりましたわ
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
メモリの初期値
C言語・C++・C#
-
変数の値が勝手に変化する原因
C言語・C++・C#
-
変数の内容がコロコロ変わる、原因を教えてください。
C言語・C++・C#
-
-
4
構造体のメンバをfor文で回したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Integer変数をカラにしたいので...
-
VBAのプログラムで、DIAG = 1# ...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
charとucharの違い
-
C++ 構造体の一括初期化 {0}
-
aspでユーザー定義の構造体を作...
-
構造体のデータを丸ごとコピー...
-
構造体のポインタにNULLが入らない
-
日付チェック関数について
-
構造体の初期化方法について
-
構造体にする理由・利点・使用例
-
int型とchar型について
-
リッチテキストボックスの中身...
-
値が変わるのはどうしてでしょ...
-
typedefをプログラム中で解除す...
-
値が代入されてない時
-
C言語 構造体の中に共用体を定...
-
この構造体の意味が分かりません。
-
VBAの変数のデータ型を変更する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
「#undef」と「#define」の使い...
-
C言語 構造体の中に共用体を定...
-
構造体のデータを丸ごとコピー...
-
値が代入されてない時
-
typedefをプログラム中で解除す...
-
charとucharの違い
-
異なる構造体のデータのコピー
-
構造体のポインタにNULLが入らない
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
VBAの変数のデータ型を変更する...
-
整数から16進数への変換 現在c...
-
構造体の初期化方法について
-
日付チェック関数について
-
1バイトデータの読み出しについて
-
GTKプログラミングで型宣言する...
-
命名規則 VB 構造体
おすすめ情報