Результаты поиска по запросу "undefined-behavior"

2 ответа

Почему эта реализация strlen () работает?

(Отказ от ответственности: я виделэтот вопрос [https://stackoverflow.com/questions/11787810/strlen-performance-implementation] и я не переспрашиваю - меня интересуетПочемукод работает, ине вкаконо ...

3 ответа

 Тип может иметь представления ловушек, это может быть UB, если представление знака является дополнением.

отрим следующую C-программу: #include <stdio.h> int main(){ int a =-1; unsigned b=-1; if(a==b) printf("%d %d",a,b); else printf("Unequal"); return 0; }В соответствииprintf("%d %d",a,b);, "%d" используется для печати беззнакового типа. Это ...

2 ответа

Это означает что-то вроде «съедение циклов процессора не является побочным эффектом». Код, который не имеет побочных эффектов, кроме использования ЦП, и не дает значения, которое будет использовано позже, не должен запускаться вообще. Реализация свободна решать, запускать этот код или нет. Это, однако, не получить заказ пиццы.

+ 11, как бесконечный цикл без побочных эффектов, следующая программа - UB: int main() { while (true) {} }Является ли следующее также UB? void foo() { foo(); } int main() { foo(); }Цитаты из стандарта для обеих программ были бы идеальными.

ТОП публикаций

2 ответа

Арифметическое смещение вправо дает фиктивный результат?

Я должен быть абсолютно сумасшедшим здесь, ноgcc 4.7.3 на моей машине дает самый абсурдный результат. Вот точный код, который я тестирую: #include <iostream> using namespace std; int main(){ unsigned int b = 100000; cout << (b>>b) << endl; b = b ...

5 ответов

v - это двумерный массив. Поскольку вы ссылаетесь только на одно измерение, то в итоге вы получаете указатель char на базовый массив, и, следовательно, этот оператор пытается присвоить константу char указателю char. Вы можете использовать двойные кавычки, чтобы заменить константу на строку в стиле C, или вы можете явно ссылаться на v [i] [0], что я и предполагал.

еопределенное поведение, если я прохожу элементы 2D-массива следующим образом? int v[5][5], i; for (i = 0; i < 5*5; ++i) { v[i] = i; }Опять же, это даже компилируется? (Я не могу попробовать это прямо сейчас, я не дома.) Если это не так, то ...

4 ответа

Срок действия кода

Рассмотрим следующий код: void populate(int *arr) { for(int j=0;j<4;++j) arr[j]=0; } int main() { int array[2][2]; populate(&array[0][0]); }Об этом говорилось в местном сообществе, является ли код действительным или нет (я должен упомянуть его ...

2 ответа

Оба случая в ответе выше приводят к UB. В общем, идиомы следует избегать, потому что есть так много разных способов, которые могут привести к UB.

т мой вопрос@DeadMG говорит, что реинициализация класса через [https://stackoverflow.com/questions/6036086/is-it-valid-to-directly-call-a-virtual-destructor] указатель является неопределенным поведением. Есть ли где-нибудь упоминание об этом в ...

10 ответов

Как сопряжение new [] с delete может привести только к утечке памяти?

Прежде всего, используяdelete за все, что выделеноnew[] является неопределенным поведением в соответствии со стандартом C ++. В Visual C ++ 7 такое спаривание может привести к одному из двух последствий. Если тип new [] 'ed имеет тривиальный ...

3 ответа

Список инициализаторов * аргумент * порядок оценки

оведение хорошо определено? class Foo { int A, B; public: Foo(int Bar): B(Bar), A(B + 123) { } }; int main() { Foo MyFoo(0); return 0; }

6 ответов

Может ли объект, выделенный в куче, быть константным в C ++?

В C ++ объект, выделенный из стека, может быть объявленconst: const Class object;после этого попытка вызова неконстантного метода для такого объекта является неопределенным поведением: const_cast<Class*>( &object )->NonConstMethod(); //UBМожет ...