Свързани въпроси 'undefined-behavior'

При кой точно израз тази програма проявява недефинирано поведение според стандарта C++?
(Наясно съм с факта, че връщането на адрес/препратка към променлива, локална за функцията, трябва да се избягва и програмата никога не трябва да прави това.) Връщането на препратка към локална променлива/препратка води ли до недефинирано...
239 изгледи
schedule 19.09.2022

низ s; &s+1; Законно? UB?
Разгледайте следния код: #include <cstdlib> #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int main() { string myAry[] = { "Mary", "had",...
351 изгледи
schedule 21.10.2022

Позволено ли е на C++ компилатор да излъчва произволен код, след като срещне конструкция, която е класифицирана като недефинирано поведение?
Възможен дубликат: Недефинирано, неопределено и дефинирано от внедряването поведение Опитвам се да задълбоча разбирането си за недефинирано поведение в C++. Да предположим, че C++ компилатор умишлено ще открие някои случаи на...
391 изгледи
schedule 01.12.2022

Идиом на виртуален конструктор - добродетелен или пълна абсолютна заблуда
Едно от златните правила в C++ е, че животът на един екземпляр започва, когато неговият конструктор завърши успешно и завършва, когато започне неговият деструктор. От това правило заключаваме, че НЕ е добра идея да се извикват виртуални методи в...
782 изгледи

Това недефинирано поведение ли е в C/C++
int foo(int c){ return c; } int main(void){ int a=5,c; c = foo(--a) + a; } Ще извика ли недефинирано поведение в C/C++? Мисля, че няма да стане. След като прочетох всички отговори, не мога да разбера дали това е недефинирано...
336 изгледи
schedule 19.10.2022

Дали (празен) безкраен цикъл е недефинирано поведение в C?
Дали безкраен цикъл като for (;;); недефинирано поведение в C? (Това е за C++ , но не знам за C.)
2267 изгледи
schedule 20.10.2022

Използване на this.var по време на инициализация на var
Докато проучвах друг въпрос , бях изненадан да открия, че следната Java кодът се компилира без грешки: public class Clazz { int var = this.var + 1; } В моя JDK6 var се инициализира до 1 . Горният код има ли добре дефинирана...
186 изгледи
schedule 25.10.2023

Lua - Две локални променливи с едно и също име
Учих Lua и се чудех дали е позволено да препраща към две локални променливи с едно и също име. Например в следния кодов сегмент законен ли е синтаксисът (без недефинирано поведение )? Питам, защото работи, но не мога да разбера какво се...
1742 изгледи
schedule 18.11.2022

Има ли случаи, при които би било дефинирано понижаване на действителна база към производна?
В общия случай е (много заслужено) недефинирано поведение за dowcast от (динамичен) Base към един от производните класове Derived Очевидното UB class Base { public: virtual void foo() { /* does something */ } int a; } class...
447 изгледи
schedule 25.11.2023

Позволена ли е свобода на действие на компилатора в това, което счита за недефинирано поведение в постоянен израз?
Знаем, че операциите, които биха причинили недефинирано поведение, не са основни постоянни изрази ( раздел 5.19 параграф 2 от проект на C++ стандарт ) В тестовете, които направих, clang и gcc третират недефинираното поведение в constexpr...
695 изгледи

Изтичането на памет причинява ли недефинирано поведение?
Тази дискусия се появи в коментари на друга публикация . Примерен код: #include <string> void func() { std::string* foo; foo = new std::string[125]; throw 1; delete [] foo; } int main() { try { func(); }...
1196 изгледи
schedule 06.11.2023

Защо a = a се оценява на нула?
Възможен дубликат: Защо a = a е нула в Руби? В хумористичния светкавичен разговор - Wat , изнесен от Гари Бернхард, следният код се оценява на нула: a = a #=> nil Но всичко различно от самостоятелно присвояване води до...
179 изгледи
schedule 20.12.2023

Какво може да се обърка, ако cout.rdbuf() се използва за превключване на буфера и никога не го връща?
Авторът представи този код под заглавието A bus error on my platform #include <fstream> #include <iostream> int main() { std::ofstream log("oops.log"); std::cout.rdbuf(log.rdbuf()); std::cout << "Oops!\n";...
1717 изгледи
schedule 17.01.2024

Как сдвояването на new[] с delete може да доведе само до изтичане на памет?
На първо място, използването на delete за всичко, разпределено с new[] , е недефинирано поведение според стандарта C++. Във Visual C++ 7 такова сдвояване може да доведе до едно от двете последствия. Ако типът new[]'ed има тривиален...
8164 изгледи

Взаимозависима инициализация със запетаи?
Дали следното е перфектно дефинирано: int x = 42, y = x; т.е. строго еквивалентно на: int x = 42; int y = x; РЕДАКТИРАНЕ: въпросът не е за стил (знам, че не е наред...), въпросът е "теоретичен"
831 изгледи

Странни резултати за условен оператор с GCC и bool указатели
В следния код аз memset() stdbool.h bool променлива до стойност 123 . (Може би това е недефинирано поведение?) След това предавам указател към тази променлива към функция жертва, която се опитва да защити срещу неочаквани стойности с помощта...
780 изгледи

Законно ли е прехвърлянето на int указател към плаващ указател, ако имат същото подравняване?
Да кажем, че и int , и float са подравнени по 4 байта. Съгласно ISO C99 6.3.2.3 p.7: Указател към обект или непълен тип може да бъде преобразуван в указател към различен обект или непълен тип. Ако полученият указател не е правилно...
115 изгледи

Недефинирано поведение в for цикъл - не трябва ли разделянето на изрази да прави това добре дефинирано?
Знам, че тази тема беше пребита до смърт в SO, но все още съм малко объркан относно ситуацията, показана по-долу - и много хора изглежда се съгласиха, че е правилно. Разбирам, че не можете да модифицирате/използвате модифицирана променлива повече...
425 изгледи
schedule 11.04.2024

printf() без аргументи в C компилира добре. как
Опитах програмата c по-долу и очаквах да получа грешка при компилиране, но защо компилаторът не дава никаква грешка? #include <stdio.h> int main(void) { printf("%d\n"); return 0; } Защо изходът зависи от компилатора? Ето изхода...
2525 изгледи
schedule 16.04.2024

Индексиране на 2D масив - недефинирано поведение?
Наскоро попаднах в някои парчета код, извършвайки някои съмнителни операции за индексиране на 2D масиви. Разглеждайки като пример следния примерен код: int a[5][5]; a[0][20] = 3; a[-2][15] = 4; a[5][-3] = 5; Операциите за индексиране по-горе...
703 изгледи