Segmentation Fault

Discussion in 'Programmer's Corner' started by kurtruk, Feb 21, 2014.

  1. kurtruk

    Thread Starter Member

    Aug 26, 2012
    140
    6
    Let me post the code first of all.

    main.cpp:
    Code ( (Unknown Language)):
    1. #include <iostream>
    2. #include "Font.h"
    3. #include "DisplayFunctions.h"
    4. using namespace std;
    5.  
    6. DisplayFunctions dfObj;
    7.  
    8. int main()
    9. {
    10.     dfObj.getMsg();
    11.     dfObj.createByteMap();
    12.     return 0;
    13. }
    14.  
    Font.h:
    Code ( (Unknown Language)):
    1. #ifndef FONT_H
    2. #define FONT_H
    3.  
    4. class Font
    5. {
    6.     public:
    7.        /*Set Up font to ASCII character*/
    8.       short int ASCII [127][8] = {
    9.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     0
    10.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     1
    11.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     2
    12.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     3
    13.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     4
    14.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     5
    15.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     6
    16.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     7
    17.             {  0,   0,   0,   0,   0,   0,   0,   0},          //     8
    18.             {  0, 256, 256, 256, 256, 256, 256, 256},          //     9
    19.             { 60,  66, 169, 133, 133, 169,  66,  60},          //  ☺  10
    20.             {  0,   8,   8,   8,  42,  28,   8, 256},          //  →  11
    21.             {  0,   8,  28,  42,   8,   8,   8, 256},          //  ←  12
    22.             {  0,  16,  32, 127,  32,  16, 256, 256},          //  ↑  13
    23.             {  0,   4,   2, 127,   2,   4, 256, 256},          //  ↓  14
    24.             {  0,   4,   2,  49,   1,  49,   2,   4},          //  (: 15
    25.             {  0,  17,  41,  41,  69,  69, 256, 256},          //  ≤  16
    26.             {  0,  69,  69,  41,  41,  17, 256, 256},          //  ≥  17
    27.             {  0,  29,  39,  32,  39,  29, 256, 256},          //  Ω  18
    28.             {  0,  63,   2,   2,   4,  62, 256, 256},          //  µ  19
    29.             {  0,  21,  22,  28,  52,  84, 256, 256},          //  ≠  20
    30.             {  0,  16,  15,  24,   8,  31,   8, 256},          //  π  21
    31.             {  0,  18,  36,  36,  18,  36, 256, 256},          //  ≈  22
    32.             {  0,   6,   1,   6,  56, 192, 256, 256},          //  √  23
    33.             {  0,   8,   8,  42,   8,   8, 256, 256},          //  ÷  24
    34.             {  0, 249,   0, 249, 256, 256, 256, 256},          //  ‼  25
    35.             {  0,  24,  36,  36,  24,  36, 256, 256},          //  α  26
    36.             {  0,   3,   7, 254,  64,  48, 256, 256},          //  ♪  27
    37.             {  0,   3,  31,  32,  64, 140, 252, 256},          //  ♫  28
    38.             {  0,   6,   1,   6, 248, 128, 128, 256},          //  √  29
    39.             {  0, 255, 255, 255, 255, 255, 256, 256},          //  █  30
    40.             {  0,  34,  34, 250,  34,  34, 256, 256},          //  ±  31
    41.             {  0,   0,   0,   0,   0, 256, 256, 256},          //     32
    42.             {  0, 249, 256, 256, 256, 256, 256, 256},          //  !  33
    43.             {  0, 224,   0, 224,   0, 256, 256, 256},          //  "  34
    44.             {  0,  20, 127,  20, 127,  20, 256, 256},          //  #  35
    45.             {  0,  38,  82, 255,  74,  36, 256, 256},          //  $  36
    46.             {  0, 193, 198,  24,  99, 131, 256, 256},          //  %  37
    47.             {  0,  54,  73,  85,  34,   5, 256, 256},          //  &  38
    48.             {  0, 224,   0, 256, 256, 256, 256, 256},          //  '  39
    49.             {  0,  60,  66, 129, 256, 256, 256, 256},          //  (  40
    50.             {  0, 129,  66,  60, 256, 256, 256, 256},          //  )  41
    51.             {  0,  80,  32, 248,  32,  80, 256, 256},          //  *  42
    52.             {  0,   8,   8,  62,   8,   8, 256, 256},          //  +  43
    53.             {  0,   1,   6, 256, 256, 256, 256, 256},          //  ,  44
    54.             {  0,   8,   8,   8,   8,   8, 256, 256},          //  -  45
    55.             {  0,   3,   3, 256, 256, 256, 256, 256},          //  .  46
    56.             {  0,   1,   6,  24,  96, 128, 256, 256},          //  /  47
    57.             {  0, 126, 129, 129, 129, 126, 256, 256},          //  0  48
    58.             {  0,  33,  65, 255,   1,   1, 256, 256},          //  1  49
    59.             {  0,  97, 131, 133, 137, 145,  97, 256},          //  2  50
    60.             {  0, 129, 137, 137, 137, 118, 256, 256},          //  3  51
    61.             {  0, 248,   8,   8,   8, 255, 256, 256},          //  4  52
    62.             {  0, 226, 145, 145, 145, 146, 256, 256},          //  5  53
    63.             {  0,  62,  81, 145, 145,  14, 256, 256},          //  6  54
    64.             {  0, 129, 134, 152, 160, 192, 256, 256},          //  7  55
    65.             {  0, 118, 137, 137, 137, 118, 256, 256},          //  8  56
    66.             {  0, 112, 137, 137, 138, 124, 256, 256},          //  9  57
    67.             {  0,  54,  54, 256, 256, 256, 256, 256},          //  :  58
    68.             {  0,  49,  54, 256, 256, 256, 256, 256},          //  ;  59
    69.             {  0,   8,  20,  20,  34,  34, 256, 256},          //  <  60
    70.             {  0,  20,  20,  20,  20, 256, 256, 256},          //  =  61
    71.             {  0,  34,  34,  20,  20,   8, 256, 256},          //  >  62
    72.             {  0,  64, 128, 133, 136, 112, 256, 256},          //  ?  63
    73.             {  0,  60,  66, 153, 165, 189, 133, 121},          //  @  64
    74.             {  0,  63,  72, 136,  72,  63, 256, 256},          //  A  65
    75.             {  0, 255, 137, 137, 137, 118, 256, 256},          //  B  66
    76.             {  0, 126, 129, 129, 129,  66, 256, 256},          //  C  67
    77.             {  0, 255, 129, 129,  66,  60, 256, 256},          //  D  68
    78.             {  0, 255, 137, 137, 137, 129, 256, 256},          //  E  69
    79.             {  0, 255, 136, 136, 136, 128, 256, 256},          //  F  70
    80.             {  0, 126, 129, 129, 137,  78, 256, 256},          //  G  71
    81.             {  0, 255,   8,   8,   8, 255, 256, 256},          //  H  72
    82.             {  0, 129, 129, 255, 129, 129, 256, 256},          //  I  73
    83.             {  0,   6,   1,   1, 129, 254, 256, 256},          //  J  74
    84.             {  0, 255,   8,  52,  66, 129, 256, 256},          //  K  75
    85.             {  0, 255,   1,   1,   1,   1, 256, 256},          //  L  76
    86.             {  0, 255,  64,  32,  16,  32,  64, 255},          //  M  77
    87.             {  0, 255,  64,  48,  12,   2, 255, 256},          //  N  78
    88.             {  0, 126, 129, 129, 129, 129, 126, 256},          //  O  79
    89.             {  0, 255, 136, 136, 136, 112, 256, 256},          //  P  80
    90.             {  0, 126, 129, 129, 133, 130, 125, 256},          //  Q  81
    91.             {  0, 255, 136, 140, 138, 113, 256, 256},          //  R  82
    92.             {  0, 114, 137, 137, 137,  79, 256, 256},          //  S  83
    93.             {  0, 128, 128, 255, 128, 128, 256, 256},          //  T  84
    94.             {  0, 254,   1,   1,   1,   1, 254, 256},          //  U  85
    95.             {  0, 248,   6,   1,   6, 248, 256, 256},          //  V  86
    96.             {  0, 254,   1,   3,  28,   3,   1, 254},          //  W  87
    97.             {  0, 195,  36,  24,  24,  36, 195, 256},          //  X  88
    98.             {  0, 240,   8,   7,   8, 240, 256, 256},          //  Y  89
    99.             {  0, 131, 133, 137, 145, 161, 193, 256},          //  Z  90
    100.             {  0, 255, 129, 129, 256, 256, 256, 256},          //  [  91
    101.             {  0, 128,  96,  24,   6,   1, 256, 256},          //  \  92
    102.             {  0, 129, 129, 255, 256, 256, 256, 256},          //  ]  93
    103.             {  0,  32,  64, 128,  64,  32, 256, 256},          //  ^  94
    104.             {  0,   1,   1,   1,   1,   1, 256, 256},          //  _  95
    105.             {  0, 128,  64,  32, 256, 256, 256, 256},          //  `  96
    106.             {  0,   2,  21,  21,  21,  15, 256, 256},          //  a  97
    107.             {  0, 255,  17,  17,  17,  14, 256, 256},          //  b  98
    108.             {  0,  14,  17,  17,  17, 256, 256, 256},          //  c  99
    109.             {  0,  14,  17,  17,  17, 255, 256, 256},          //  d  100
    110.             {  0,  14,  21,  21,  21,  12, 256, 256},          //  e  101
    111.             {  0,   8, 127, 136, 128,  64, 256, 256},          //  f  102
    112.             {  0,  24,  37,  37,  37,  62, 256, 256},          //  g  103
    113.             {  0, 255,   8,  16,  16,  15, 256, 256},          //  h  104
    114.             {  0,  95, 256, 256, 256, 256, 256, 256},          //  i  105
    115.             {  0,   2,   1,   1,  94, 256, 256, 256},          //  j  106
    116.             {  0, 255,   8,  20,  34,   1, 256, 256},          //  k  107
    117.             {  0, 129, 255,   1, 256, 256, 256, 256},          //  l  108
    118.             {  0,  31,  16,  12,  16,  15, 256, 256},          //  m  109
    119.             {  0,  31,   8,  16,  16,  15, 256, 256},          //  n  110
    120.             {  0,  14,  17,  17,  17,  14, 256, 256},          //  o  111
    121.             {  0,  31,  20,  20,  20,   8, 256, 256},          //  p  112
    122.             {  0,   8,  20,  20,  12,  31, 256, 256},          //  q  113
    123.             {  0,  31,   8,  16,  16,   8, 256, 256},          //  r  114
    124.             {  0,   9,  21,  21,  21,  18, 256, 256},          //  s  115
    125.             {  0,  16, 254,  17,   2, 256, 256, 256},          //  t  116
    126.             {  0,  31,   1,   1,   2,  31, 256, 256},          //  u  117
    127.             {  0,  28,   2,   1,   2,  28, 256, 256},          //  v  118
    128.             {  0,  30,   1,   6,   1,  30, 256, 256},          //  w  119
    129.             {  0,  17,  10,   4,  10,  17, 256, 256},          //  x  120
    130.             {  0,  24,   5,   5,   5,  30, 256, 256},          //  y  121
    131.             {  0,  19,  21,  21,  25, 256, 256, 256},          //  z  122
    132.             {  0,  24, 126, 129, 256, 256, 256, 256},          //  {  123
    133.             {  0, 255, 256, 256, 256, 256, 256, 256},          //  |  124
    134.             {  0, 129, 126,  24, 256, 256, 256, 256},          //  } 125
    135.             {  0,   8,  16,  16,   8,  16, 256, 256},          //  ~  126
    136.         };
    137. };
    138.  
    139. #endif // FONT_H
    140.  
     
  2. kurtruk

    Thread Starter Member

    Aug 26, 2012
    140
    6
    DisplayFunctions.h
    Code ( (Unknown Language)):
    1. #ifndef DISPLAYFUNCTIONS_H
    2. #define DISPLAYFUNCTIONS_H
    3.  
    4. class DisplayFunctions
    5. {
    6.     public:
    7.         short int *rmsgByteMap;
    8.         char msg [512];
    9.         int numberOfCol;
    10.         int characterArrayLength[];
    11.  
    12.         void getMsg();
    13.         char createCharacterByteMap(char c);
    14.         void createByteMap();
    15.         void send();
    16. };
    17. #endif // DISPLAYFUNCTIONS_H
    18.  
    DisplayFunctions.cpp:
    Code ( (Unknown Language)):
    1. #include "DisplayFunctions.h"
    2. #include <iostream>
    3. #include <string>
    4. #include <cstdlib>
    5. #include <ctime>
    6. #include<stdio.h>
    7. #include<conio.h>
    8. #include "Font.h"
    9. using namespace std;
    10.  
    11. Font fontObj;
    12.  
    13. void DisplayFunctions::getMsg(){
    14.     int characterLength =0;
    15.     int msgLength=0;
    16.     cin.getline(msg, 512);
    17.  
    18.     for(msgLength = 0; msg[msgLength] != '\0'; msgLength++);
    19.  
    20.     for(int character = 0; character < msgLength; character++){
    21.         for(int i=0; i < 8; i++){
    22.             if (fontObj.ASCII[(msg[character])][i] != 256){
    23.                 characterLength++;
    24.             }
    25.         }
    26.         characterArrayLength[character] = characterLength;
    27.         numberOfCol += characterLength;
    28.         characterLength = 0;
    29.     }
    30. }
    31.  
    32. void DisplayFunctions::createByteMap(){
    33.     rmsgByteMap=new short int[numberOfCol];
    34.     int Character = 0;
    35.     int charColIndex=0;
    36.  
    37.     for (int col=0;col<numberOfCol;col++){
    38.         rmsgByteMap[col] = fontObj.ASCII[msg[Character]][charColIndex];
    39.         charColIndex++;
    40.  
    41.         if(charColIndex == characterArrayLength[Character]){
    42.             charColIndex = 0;
    43.             Character++;
    44.         }
    45.     }
    46.     cout << "rmsgByteMap = " << endl;
    47.     cout << "{";
    48.     for(int col=0;col<numberOfCol;col++){
    49.         cout << rmsgByteMap[col] << ", ";
    50.     }
    51.     cout << "}" << endl;
    52. }
    53. [/i]



    I get a segmentation fault.

    Stepping though the program reveals that it happens at the very end even after return 0;

    I am unfamiliar with debugers. The "call stack" says 00457CDA std::basic_ostream<wchar_t, std::char_traits<wchar_t> >::flush()

    Here's some more info that I scarcely know the meaning of:
    Problem Event Name: APPCRASH
    Application Name: MATRIX~1.EXE
    Application Version: 0.0.0.0
    Application Timestamp: 5307fff6
    Fault Module Name: MATRIX~1.EXE
    Fault Module Version: 0.0.0.0
    Fault Module Timestamp: 5307fff6
    Exception Code: c0000005
    Exception Offset: 00057cda
    OS Version: 6.1.7601.2.1.0.256.48
    Locale ID: 1033
    Additional Information 1: fdef
    Additional Information 2: fdef00b82efcfeb2a8d9fda4b24bbd53
    Additional Information 3: 965d
    Additional Information 4: 965df9fcde076979e37092106956450b


    It only happens when the message that the user enters is somewhat long.
    So why am I getting a segmentation fault?
     
  3. spinnaker

    AAC Fanatic!

    Oct 29, 2009
    4,887
    1,012
  4. kurtruk

    Thread Starter Member

    Aug 26, 2012
    140
    6
    I have googled segmentation fault and could note find where my code went wrong.
     
  5. spinnaker

    AAC Fanatic!

    Oct 29, 2009
    4,887
    1,012
    1. You now know what causes that error now (in general).

    2. You have the code.

    3. You should have a debugger.

    You have everything you need. Just step through the code and watch where your code is going out of bounds accessing memory.

    More than likely it is characterArrayLength. You need to allocate memory. You can't do it like this characterArrayLength[];. That is an array with no memory allocated.


    If you want to be a programmer then you need to become familiar with debuggers.
     
  6. kurtruk

    Thread Starter Member

    Aug 26, 2012
    140
    6

    Thanks SO MUCH, that worked.
     
Loading...