の違い、これはg++
(バージョン5.4)を使用してコンパイルし、出力を実行すると私のプログラムSegementationの故障箇所があるためprintfの以下
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main() {
int i;
int* mix_buffer = &i;
int k = 0;
while(1) {
mix_buffer[k]=1;
printf("\n k = %d", k); // 1st printf
printf("\n mix_buffer[%d] = %d k = %d", k, mix_buffer[k], k); //2nd printf
k++;
}
}
ある
k = 0
mix_buffer[0] = 1 k = 0
Segmentation fault (core dumped)
すなわちセグメンテーション違反は、かつての両方を通過した後に発生していますprintfステートメント私はプログラムの最初のprintf文をコメントし、再コンパイルする場合
ただし、出力は
Segmentation fault (core dumped)
なぜ以前のセグメンテーションフォールトするプログラム原因
printf("\n k = %d", k); // 1st printf
のコメントんでしょうか?
あなたのプログラム*未定義の動作*を呼び出します。それを理解しようとするのを止め、代わりにそれを固定することに集中することができます。 'mix_buffer [k]'が0より大きい 'k'の場合は、あなたを崖から送ります。あなたの*コンパイルされたコードと*あなたの*実行環境での*実装で何が起こっているのか本当に見たい場合、アセンブリレベルのデバッガは常に素晴らしいツールです。 – WhozCraig
なぜ 'printf'をC++コードで使用していますか?また '' std;を使うのは悪いです - [こちら](http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice) –
@EdHealおかげさまで提案してください。 std :: coutを使用すると同じ動作になります。 – user13107