以下のようなプログラムを書きました。(一部省略)
data2[8] = '\0'; の行が実行された後になぜかgの値が1から0に変化してしまいました。
勝手に変数の値が変化しており、原因が把握できていません。
この原因として考えられることがあれば教えていただけないでしょうか?
よろしくお願いします
以下、書いたプログラムです。
char data2[8];
FILE* fp;
int g;
int main{
fread(data2,8,1,fp);
data2[8] = '\0'; ←ここでgの値が変化します。
fread(data2,8,1,fp);
data2[8] = '\0';
return 0;
}
No.3
- 回答日時:
皆さんがおっしゃるように,data2[8]は間違いで,こうしたければ
char data2[9]; <=9バイト確保
fread(data2,8,1,fp); <=8バイト読み込み
data2[8]='\0'; <= 9バイト目をNULLに.
とすべきでしょう.
プログラムメモリ上では,data2が8バイト,その直後にg が割り当てられているようで,
data2[8]はgの4バイトの一部にあたるのだと思います.だから,gの値が変わってしまう.
自分のプログラムを破壊しているということですね.
この場合,自プログラム内のメモリにアクセスしているのでOSはエラーを返さないのです.
もちろん,破壊した部分がデータではなく,プログラム部分であれば,破壊されたプログラムによってCPUがそれを実行できない場合は,エラーが起こりプログラムが異常終了します.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) EXCEL 行固定列移動 3 2022/04/04 09:27
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
変数の内容がコロコロ変わる、原因を教えてください。
C言語・C++・C#
-
値が変わるのはどうしてでしょうか?
C言語・C++・C#
-
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
-
4
構造体の宣言でエラーが出ます。
C言語・C++・C#
-
5
unsigned char配列への入力の仕方
C言語・C++・C#
-
6
配列変数のポインターが勝手に変わる
C言語・C++・C#
-
7
エラーの意味は? Lvalue required
C言語・C++・C#
-
8
関数から配列を返すには?
C言語・C++・C#
-
9
変数が勝手に変わります
Visual Basic(VBA)
-
10
C++のfor文について
C言語・C++・C#
-
11
define で 配列
C言語・C++・C#
-
12
バッファとは何ですか
C言語・C++・C#
-
13
#pragma プリプロセス について
その他(プログラミング・Web制作)
-
14
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
15
charでの計算?
C言語・C++・C#
-
16
メモリをアドレスを直接指定して値を取得するには
C言語・C++・C#
-
17
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
18
変数名の付け方
Java
-
19
条件付きコンパイル: #IF 1 Then と #IF 0 Then
Visual Basic(VBA)
-
20
scanfが2回使えない・・・?;
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
3つの整数のうち奇数のみを表示...
-
【JAVA】数字をひし形に出力す...
-
Fortran90についての質問です。
-
c言語のプログラミング 2つの整...
-
ProC 固定SQLでNULLってどう表...
-
C言語 バッファについて。
-
JCLの基本について教えてください
-
MessageBoxでの処理の仕方が分...
-
_dupenv_s関数でメモリリーク
-
Sublime Text 3でのFortranプロ...
-
VBE Excelのマクロがわかりませ...
-
ruby
-
65536は2の何乗なのでしょうか?
-
あるプログラムのコマンドライ...
-
0除算して、落ちるプログラムと...
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
正しい五十音順について
-
パックマンプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
ruby
-
JCLの基本について教えてください
-
値Xを入力し、その平方根を画面...
-
N88basicを用いたGPIB制御
-
COBOLのピリオド
-
ProC 固定SQLでNULLってどう表...
-
Fortran90についての質問です。
-
main関数終了時のreturnの意味は?
-
360度を超える角度
-
C言語 バッファについて。
-
3つの整数のうち奇数のみを表示...
-
Fortran "実引数の型が仮引数の...
-
Delphi 6 で 2進数→10進数変換
-
javaで整数nを入力し、それが素...
-
fortran if文
-
3次関数を作るプログラム
-
BASICプログラム入門 副書名 プ...
おすすめ情報