source

이상한 세그먼트화(코어 덤프화) - C 프로그래밍 언어 연습 13

factcode 2022. 9. 6. 22:17
반응형

이상한 세그먼트화(코어 덤프화) - C 프로그래밍 언어 연습 13

안녕, 나는 지금 K&R - C 프로그래밍 언어 연습 13을 하고 있어.지금까지의 코드는 다음과 같습니다.

#include <stdio.h>
#include <termios.h>
#include <unistd.h>

#define ARRAY_SIZE 99

int main() {
  struct termios old_tio, new_tio;

  /* get the terminal settings for stdin */
  tcgetattr(STDIN_FILENO, &old_tio);

  /* we want to keep the old setting to restore them a the end */
  new_tio = old_tio;

  /* disable canonical mode (buffered i/o) and local echo */
  new_tio.c_lflag &= (~ICANON & ~ECHO);

  /* set the new settings immediately */
  tcsetattr(STDIN_FILENO, TCSANOW, &new_tio);

  int c, length, lengthArray[ARRAY_SIZE], word, lastChar, longestWord;

  word = 0;
  longestWord = 0;

  while ((c = getchar()) != 'q') {
    if (c == ' ' || c == '\t' || c == '\n') {
      if (lastChar != ' ' && lastChar != '\t' && lastChar != '\n') {
        lengthArray[word] = length;
        word++;
        length = 0;
      }
    } else {
      length++;
      if (length > longestWord)
        longestWord = length;
    }
    putchar(c);
    lastChar = c;
  }

  int histogram[longestWord];
  for (int i = 0; i < longestWord; i++) {
    histogram[i] = 0;
  }

  for (int i = 0; i < word; i++) {
    histogram[lengthArray[i]] += 1;
  }

  for (int i = 0; i < longestWord; i++) {
    printf("%d: %d\n", i, histogram[i]);
  }

  /* restore the former settings */
  tcsetattr(STDIN_FILENO, TCSANOW, &old_tio);

  return 0;
}

매번 실행할 때마다 삽입 오류가 발생합니다. 마지막 for loop을 언급하지 않는 한.


  for (int i = 0; i < longestWord; i++) {
    printf("%d: %d\n", i, histogram[i]);
  }

printf 스테이트먼트를 코멘트 아웃 하는 것은 도움이 되지 않기 때문에 for 루프가 문제입니다.(실제 연습코드는int c, length, lengthArrayTermios는 단말기에서 표준 모드를 비활성화하기 위한 것입니다.)

int 히스토그램[longestWord];배열 선언에서는 컴파일 시 크기를 알아야 합니다.실행 시에만 히스토그램이 알려진 크기를 지정할 수 없습니다.

언급URL : https://stackoverflow.com/questions/73593135/weird-segmentation-faut-core-dumbed-the-c-programming-language-exercise-13

반응형