«undefined-behavior» 태그된 질문

컴파일러, 인터프리터 또는 런타임 시스템이 강요 할 필요가없는 언어의 규칙을 위반하는 프로그램을 컴파일하거나 실행하면 예기치 않은 결과가 발생합니다. "정의되지 않은"데이터 유형 또는 리턴 값에 관한 질문에이 태그를 사용하지 마십시오. 이 경우 [정의되지 않은] 태그를 대신 사용해야합니다.



9
8 비트 정수에서 크기가 8 비트보다 큰 값을 어떻게 얻었습니까?
나는이 작은 보석 뒤에 숨어있는 매우 불쾌한 벌레를 추적했습니다. C ++ 사양에 따라 서명 된 오버플로는 정의되지 않은 동작이지만 값이 bit-width로 확장 될 때 오버플로가 발생할 때만 발생한다는 것을 알고 sizeof(int)있습니다. 내가 이해했듯이, 증가하는 char것은 sizeof(char) < sizeof(int). 그러나 그것은 불가능한 가치를 c얻는 방법을 설명하지 않습니다 . 8 비트 정수로서 …

8
"구조 해킹"은 기술적으로 정의되지 않은 동작입니까?
내가 묻는 것은 잘 알려진 "구조체의 마지막 멤버가 가변 길이를 가짐"트릭입니다. 다음과 같이 진행됩니다. struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); 구조체가 메모리에 배치되는 방식으로 인해 필요한 것보다 큰 블록 위에 구조체를 오버레이하고 마지막 멤버를 …

2
C ++ 20까지 int 정의되지 않은 동작에 malloc을 사용하고 있습니다.
다음 코드는 C ++ 20까지 정의되지 않은 동작이 있다고 들었습니다. int *p = (int*)malloc(sizeof(int)); *p = 10; 사실인가요? 인수는 int값을 할당하기 전에 객체 의 수명이 시작되지 않는다는 것입니다 ( P0593R6 ). 문제를 해결하려면 배치를 new사용해야합니다. int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; 개체의 수명을 시작하기 위해 간단한 …


8
정의되지 않은 동작이있는 분기를 도달 할 수 없다고 가정하고 데드 코드로 최적화 할 수 있습니까?
다음 진술을 고려하십시오. *((char*)NULL) = 0; //undefined behavior 정의되지 않은 동작을 명확하게 호출합니다. 주어진 프로그램에 그러한 명령문이 존재한다는 것은 전체 프로그램이 정의되지 않았거나 제어 흐름이이 명령문에 도달하면 동작이 정의되지 않음을 의미합니까? 사용자가 번호를 입력하지 않는 경우 다음 프로그램이 잘 정의되어 3있습니까? while (true) { int num = ReadNumberFromConsole(); if (num …

10
왜 printf ( "% f", 0); 정의되지 않은 동작을 제공합니까?
진술 printf("%f\n",0.0f); 0을 인쇄합니다. 그러나 진술 printf("%f\n",0); 임의의 값을 인쇄합니다. 나는 내가 어떤 종류의 정의되지 않은 행동을 보이고 있다는 것을 알고 있지만, 그 이유를 구체적으로 알 수는 없습니다. 모든 비트가 0으로되는 부동 소수점 값은 여전히 유효 float0의 값 float과 int(즉, 더욱 중요한 경우) 내 시스템의 동일한 크기이다. 부동 소수점 리터럴 …


3
정의되지 않은 동작을 포함하는 소스 코드가 컴파일러를 충돌시키는 것이 합법적입니까?
정의되지 않은 동작을 호출하는 잘못 작성된 C ++ 소스 코드를 컴파일한다고 가정 해 보겠습니다. C ++ 언어 사양이 "적합한"컴파일러에서 허용되는 것으로 간주하는 관점에서 볼 때이 시나리오에서 "무엇이든"수행하면 컴파일러 충돌 (또는 내 암호 도용 또는 컴파일 타임에 오작동 또는 오류 발생)이 포함됩니다. 정의되지 않은 동작의 범위는 결과 실행 파일이 실행될 때 …

5
정의되지 않은 동작 및 시퀀스 포인트가 다시로드 됨
이 주제를 다음 주제의 속편으로 간주하십시오. 이전 기사 정의되지 않은 동작 및 시퀀스 포인트 이 재미 있고 복잡한 표현을 다시 살펴 보겠습니다 (이탤릭체 표현은 위의 주제 * smile *에서 가져온 것입니다). i += ++i; 우리는 이것이 정의되지 않은 행동을 유발한다고 말합니다. 나는 이것을 말할 때 type of i가 내장 유형 …


7
(왜) 초기화되지 않은 변수 정의되지 않은 동작을 사용하고 있습니까?
만약 내가 가지고 있다면: unsigned int x; x -= x; 이 표현식 뒤에는 0이 x 되어야한다는 것은 분명 하지만, 내가 보는 모든 곳에서 그들은 이 코드 의 동작 이 x(빼기 전까지) 값이 아니라 정의되지 않았다고 말합니다 . 두 가지 질문 : 이 코드 의 동작 이 실제로 정의되지 않았습니까? (예 …

3
부호있는 정수 오버플로가 C ++에서 여전히 정의되지 않은 동작입니까?
아시다시피 부호있는 정수 오버플로는 정의되지 않은 동작 입니다. 그러나 C ++ 11 cstdint문서 에는 흥미로운 것이 있습니다. 패딩 비트가없고 음수 값에 대해 2의 보수를 사용 하는 정확히 8, 16, 32 및 64 비트 너비의 부호있는 정수 유형 (구현이 유형을 직접 지원하는 경우에만 제공됨) 링크보기 그리고 여기 제 질문은 : 표준가 …

12
C / C ++에서 서명 된 오버플로 감지
언뜻보기 에이 질문은 정수 오버플로를 감지하는 방법 의 중복처럼 보일 수 있습니다 . 그러나 실제로는 상당히 다릅니다. 부호없는 정수 오버플로를 감지하는 것은 매우 사소한 일이지만 C / C ++에서 서명 된 오버플로를 감지하는 것은 실제로 대부분의 사람들이 생각하는 것보다 더 어렵다는 것을 발견했습니다. 가장 분명하지만 순진한 방법은 다음과 같습니다. int …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.