it-source

이러한 printf 문이 스택오버플로를 일으키는 이유는 무엇입니까?

criticalcode 2022. 12. 29. 20:32
반응형

이러한 printf 문이 스택오버플로를 일으키는 이유는 무엇입니까?

다음 코드를 실행하면 오류가 발생합니다.

void printData(int total_trees,int burned){
  printf("Before printing data\n");
  float percentBurned = (float)burned / (total_trees+burned)*100;
  
  printf("total burned: %d (%.1f\%)\n",burned,percentBurned);
  printf("trees left: %d\n", total_trees);
  // printf("trees left: %d\n", total_trees);
  printf("After printing data");
}

에러는 다음과 같습니다.*** stack smashing detected ***: terminated

오류를 출력하기 전에 처음 3개의 printf 문을 출력합니다.

stackoverflow 투고가 처음이므로 이미지에 링크합니다.

여러 번 다시 정렬을 시도했지만 지금까지 아무 것도 잘 되지 않았습니다.printf 스테이트먼트 자체가 오버플로를 유발한 건 아니지만 내가 틀렸을 수도 있어

협조해 주셔서 감사합니다.

편집:printf("trees left: %d\n", total_trees);에러를 발생시키기 전에 실행하는 마지막 행입니다.

탈출하는 올바른 방법%형식 문자열의 문자는%%,것은 아니다.\%경고(예: 경고)를 활성화하면 적절한 컴파일러가 경고합니다.gcc -Wall)는, 항상 실시해 주세요.

이 문제를 해결하면 프로그램이 올바르게 실행되며 시도했던 모든 경고와 소독제도 함께 실행됩니다(godbolt 사용).그래도 실패할 경우 코드의 다른 부분에 버그가 있을 수 있으므로 재현 가능한 최소한의 예를 게시해야 합니다.

언급URL : https://stackoverflow.com/questions/73595826/why-do-these-printf-statements-cause-a-stack-overflow

반응형