반응형
이러한 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
반응형
'it-source' 카테고리의 다른 글
로컬 시간 문자열을 UTC로 변환하려면 어떻게 해야 합니까? (0) | 2022.12.29 |
---|---|
.htaccess에서 upload_max_filesize를 설정하는 방법 (0) | 2022.12.29 |
목록 목록에 있는 모든 문자열을 정수로 변환하려면 어떻게 해야 합니까? (0) | 2022.12.29 |
Larabel 4: 웅변적인 ORM을 사용하여 '주문'하는 방법 (0) | 2022.12.29 |
matplotlib 그림의 글꼴 크기를 변경하는 방법 (0) | 2022.12.29 |