Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C / C ++のコアダンプ(セグメンテーション違反)


このチュートリアルでは、C / C ++のコアダンプ(セグメンテーション違反)を理解するためのプログラムについて説明します。

これは、コードが読み取り専用メモリに書き込もうとしたり、破損したメモリの場所にアクセスしようとしたりするなどの理由で発生します。

文字列リテラルの変更

int main(){
   char *str;
   str = "GfG";
   *(str+1) = 'n';
   return 0;
}

配列インデックスの範囲外へのアクセス

#include <iostream>
using namespace std;
int main(){
   int arr[2];
   arr[3] = 10;
   return 0;
}

解放されたアドレスへのアクセス

#include <stdio.h>
#include<alloc.h>
int main(void){
   int* p = malloc(8);
   *p = 100;
   free(p);
   *p = 110;
   return 0;
}

出力

Abnormal termination of program

  1. C /C++の三項演算子

    作用するために3つのオペランドを必要とする演算子は、三項演算子として知られています。 「?」で表すことができます。 :」。条件演算子とも呼ばれます。オペレーターはパフォーマンスを向上させ、コード行を減らします。 これがC言語の三項演算子の構文です Expression1 ? Expression2 : Expression3 これがC言語の三項演算子の例です 例 #include <stdio.h> int main() {    int a = -1;    double b = 26.4231;    int c

  2. セグメンテーション違反はC++での実際の未定義の動作ですか?

    未定義動作は、実装者(コンパイラやOSなど)とコンピュータに、「やりたいこと」を実行する自由、つまり結果を気にしない自由を与える方法です。 セグメンテーション違反が発生するケースは、本質的に一時的なものです。それらは常にセグメンテーション違反を引き起こすとは限りませんが、正しく実行することもできます(または少なくともそう見える)。たとえば、次のコードフラグメントを考えてみましょう- #include<iostream> int main() {     int arr[2];     arr[0] = 0;     ar