«undefined-behavior» 태그된 질문

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


10
C ++의 서명 된 오버플로 및 정의되지 않은 동작 (UB)
다음과 같은 코드 사용에 대해 궁금합니다. int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; 루프가 n시간 이 지남에 따라 반복되면 정확히 시간을 factor곱합니다 . 그러나 총 횟수를 곱한 후에 만 ​​사용됩니다 . 루프의 마지막 반복을 제외하고 오버플로 가 …

3
0 크기의 동적 배열에 대한 포인터를 증가시키는 것이 정의되어 있지 않습니까?
AFAIK는 0 크기의 정적 메모리 배열을 만들 수는 없지만 동적 배열로 만들 수는 있습니다. int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined 내가 읽은 p것처럼 과거의 한 요소처럼 작동합니다. p가리키는 주소를 인쇄 할 수 있습니다 . if(p) cout << p << endl; 반복기 (과거의 마지막 …

7
C에서 포인터 비교는 어떻게 작동합니까? 같은 배열을 가리 키지 않는 포인터를 비교해도 괜찮습니까?
K & R (C Programming Language 2nd Edition) 5 장에서 다음을 읽었습니다. 첫째, 특정 상황에서 포인터를 비교할 수 있습니다. 경우 p와 q다음의 관계가 좋아 점 같은 배열의 구성원에 ==, !=, <, >=제대로, 등 일을. 동일한 배열을 가리키는 포인터 만 비교할 수 있음을 의미하는 것 같습니다. 그러나이 코드를 시도했을 때 char …

2
std :: vector에 추가 할 때 클래스 필드의 이상한 동작
다음 상황에서 매우 이상한 동작 (clang 및 GCC에서)이 발견되었습니다. nodes하나의 요소가있는 class의 인스턴스 가있는 벡터가 있습니다 Node. 그런 다음 벡터에 nodes[0]새로운 것을 추가 하는 함수를 호출합니다 Node. 새 노드가 추가되면 호출 객체의 필드가 재설정됩니다! 그러나 일단 기능이 완료되면 다시 정상으로 돌아 오는 것 같습니다. 나는 이것이 최소한의 재현 가능한 예라고 …

4
초기화되지 않은 멤버로 구조체 복사
멤버가 초기화되지 않은 일부 구조체를 복사하는 것이 유효합니까? 나는 그것이 정의되지 않은 행동이라고 생각하지만, 그렇다면 초기화되지 않은 멤버를 구조체에 남겨 두는 것은 매우 위험합니다. 그래서 표준에 허용되는 것이 있는지 궁금합니다. 예를 들어, 이것이 유효합니까? struct Data { int a, b; }; int main() { Data data; data.a = 5; Data …

3
C는 C ++에서 std :: less에 해당합니까?
나는 최근에 일의 정의되지 않은 동작에 질문에 대답 한 p < q경우 C에서 p와 q다른 개체 / 배열에 대한 포인터이다. C ++ <은이 경우 와 동일한 (정의되지 않은) 동작을 하지만 포인터를 비교할 수있을 때 std::less와 동일한 것을 반환하고 <할 수없는 경우 일관된 순서 를 반환하는 표준 라이브러리 템플릿 을 제공합니다 …

1
consteval 함수가 정의되지 않은 동작을 허용하는 이유는 무엇입니까?
C ++에는 상수 표현식의 매우 깔끔한 속성이 있습니다. 평가에는 정의되지 않은 동작 ( 7.7.4.7 ) 이있을 수 없습니다 . 추상 기계의 규칙 ([intro.execution])에 따라 e의 평가가 다음 중 하나를 평가하지 않는 한, 표현식 e는 핵심 상수 표현식입니다. ... 이 문서의 [intro] ~ [cpp]에 지정된대로 정의되지 않은 동작을 갖는 연산 [참고 …

2
유효한 C ++ 프로그램을 종료하지 않는 프로그램입니까?
프로그램을 종료해야합니까? 다시 말해서 기술적으로 정의되지 않은 동작을 영원히 실행하는 프로그램입니까? 이것은 빈 루프에 관한 것이 아닙니다. 영원히 "물건"(즉, 관찰 가능한 행동)을하는 프로그램에 대해 이야기합니다. 예를 들면 다음과 같습니다. int main() { while (true) { try { get_input(); // calls IO process(); put_output(); // calls IO, has observable behavior // …

3
비 const에 대한 포인터와 동일한 주소의 const 인수에 대한 포인터를 가진 함수 호출
데이터 배열을 입력하고 포인터를 사용하여 다른 데이터 배열을 출력하는 함수를 작성하고 싶습니다. 두 경우 나는 결과 무엇인지 궁금 src와 dst같은 주소로 지적 내가 컴파일러는 const를 위해 최적화 할 수 있습니다 알고 있기 때문에. 정의되지 않은 동작입니까? (대답이 서로 다를 수 있는지 확실하지 않기 때문에 C와 C ++ 모두에 태그를 지정했으며 …

1
기본 static_vector 구현에서 정의되지 않은 동작
tl; dr : 내 static_vector에 정의되지 않은 동작이 있다고 생각하지만 찾을 수 없습니다. 이 문제는 Microsoft Visual C ++ 17에서 발생합니다.이 간단하고 완료되지 않은 static_vector 구현, 즉 스택 할당이 가능한 고정 용량을 가진 벡터가 있습니다. 이것은 std :: aligned_storage 및 std :: launder를 사용하는 C ++ 17 프로그램입니다. 문제와 관련이 …

1
`string.assign (string.data (), 5)`는 잘 정의되어 있습니까 아니면 UB입니까?
동료가 이것을 작성하고 싶었습니다. std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); 나는 돌아 오는 string_view것이 나에게 선험적으로 불편 하다고 말했고 , 더 나아가 여기의 앨리어싱은 UB처럼 보였다. 나는 line = strip_whitespace(line)이 경우에 해당 한다고 확신 할 수있다 line = std::string_view(line.data(), 5). 나는 전화 할 생각 string::operator=(const …


2
정의되지 않은 C ++ 동작이 C 정의 된 동작을 충족하면 어떻게됩니까?
*.cppC 컴파일러가 아닌 C ++로 컴파일 하는 파일이 있습니다. 포함 함수는 C (정확한 경우 수정하십시오!)로 정의 된 것처럼 보이는 캐스트 (마지막 줄 참조)에 의존하지만이 특수 유형의 C ++에서는 그렇지 않습니다. [...] C++ code [...] struct sockaddr_in sa = {0}; int sockfd = ...; sa.sin_family = AF_INET; sa.sin_port = htons(port); bind(sockfd, …


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