«undefined-behavior» etiketlenmiş sorular

Ne derleyici, tercüman ne de çalışma zamanı sisteminin kurallarını ihlal eden bir programın derlenmesinin ya da yürütülmesinin öngörülemez sonucu, bunu uygulamak zorunda değildir. "Undefined" veri türü veya dönüş değeriyle ilgili sorular için bu etiketi KULLANMAYIN. Bu durumlarda, bunun yerine [undefined] etiketi kullanılmalıdır.

10
C ++ 'da imzalı taşma ve tanımsız davranış (UB)
Aşağıdaki gibi kod kullanımını merak ediyorum int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; Döngü ndefalarca yinelenirse , tam olarak factorçarpılır . Ancak, sadece toplam kez çarpıldıktan sonra kullanılır . Döngünün son yinelemesi dışında asla taşmadığını varsayarsak , …


7
İşaretçi karşılaştırması C'de nasıl çalışır? Aynı diziye işaret etmeyen işaretçileri karşılaştırmak uygun mudur?
K&R (C Programlama Dili 2. Baskı) bölüm 5'de aşağıdakileri okudum: İlk olarak, işaretçiler belirli koşullar altında karşılaştırılabilir. Eğer pve qardından ilişkiler gibi nokta aynı dizinin üyelerine ==, !=, <, >=düzgün, vb işleri. Bu da sadece aynı diziyi gösteren işaretçilerin karşılaştırılabileceği anlamına geliyor. Ancak bu kodu denediğimde char t = 't'; …

2
Bir std :: vector eklerken sınıf alanlarıyla garip davranış
Aşağıdaki durumda bazı garip davranışlar (clang ve GCC) buldum. nodesBir elemanım, bir sınıf örneği olan bir vektörüm var Node. Daha sonra vektöre nodes[0]yeni eklenen bir fonksiyon çağırıyorum Node. Yeni Düğüm eklendiğinde, çağıran nesnenin alanları sıfırlanır! Bununla birlikte, işlev bittiğinde tekrar normale dönüyor gibi görünüyorlar. Bunun minimal tekrarlanabilir bir örnek olduğuna …

4
Başlatılmamış üyelerle yapıları kopyalama
Bazı üyeleri başlatılmamış bir yapıyı kopyalamak geçerli mi? Tanımlanmamış bir davranış olduğundan şüpheleniyorum, ancak eğer öyleyse, başlatılmamış üyeleri bir yapıda (bu üyeler asla doğrudan kullanılmasa bile) bırakmayı oldukça tehlikeli hale getirir. Standartta buna izin veren bir şey olup olmadığını merak ediyorum. Örneğin, bu geçerli mi? struct Data { int a, …

3
C'nin C ++ 'dan std :: less karşılığı var mı?
Kısa süre önce ve p < qne zaman farklı nesneler / diziler işaretçiler C yapmak tanımsız davranışı hakkında bir soru cevap . Bu beni düşündürdü: C ++ bu durumda aynı (tanımsız) davranışa sahiptir , ancak aynı zamanda işaretçilerin karşılaştırılabildiği zaman aynı şeyi döndürmesi ve yapamadıkları zaman tutarlı bir sıralama döndürmesi …

1
Sıkılaştırma işlevi neden tanımlanmamış davranışa izin veriyor?
C ++ 'da sabit ifadelerin çok düzgün bir özelliği vardır: değerlendirmelerinin tanımlanmamış davranışı olamaz ( 7.7.4.7 ): E ifadesi, soyut makinenin kurallarına ([intro.execution]) uygun olarak e değerlendirmesi aşağıdakilerden birini değerlendirmediği sürece, temel sabit bir ifadedir: ... bu belgenin [intro] ila [cpp] 'de belirtildiği gibi tanımlanmamış davranışa sahip bir işlem [Not: …

2
Hiçbir zaman geçerli bir C ++ programını sonlandırmaz mı?
Bir programın sonlanması gerekiyor mu? Diğer bir deyişle, teknik olarak Tanımsız Davranış sonsuza dek çalışan bir program mı? Bunun boş döngülerle ilgili olmadığını unutmayın. Sonsuza kadar "şeyler" (yani gözlemlenebilir davranış) yapan programlar hakkında konuşmak. Örneğin böyle bir şey: int main() { while (true) { try { get_input(); // calls IO …

3
Sabit adrese işaretçi ve aynı adresin sabitlerini işaretlemek için işaretçi ile işlev çağrısı
Bir dizi veri girişi ve işaretçiler kullanarak başka bir veri dizisi çıktı bir işlev yazmak istiyorum. Ben her ikisi de sonuç ne olduğunu merak ediyorum srcve dstaynı adres işaret çünkü derleyici const için optimize edebilirsiniz biliyorum. Tanımlanmamış bir davranış mı? (Hem C hem de C ++ ile etiketledim, çünkü cevabın …


1
`String.assign (string.data (), 5)` iyi tanımlanmış mı yoksa UB mi?
Bir iş arkadaşı şunu yazmak istedi: std::string_view strip_whitespace(std::string_view sv); std::string line = "hello "; line = strip_whitespace(line); Ben dönen söyledi string_viewbeni huzursuz yapılan önsel , ve dahası, örtüşme burada bana UB benziyordu. line = strip_whitespace(line)Bu durumda eşdeğer olduğunu kesin olarak söyleyebilirim line = std::string_view(line.data(), 5). Buna string::operator=(const T&) [with T=string_view]eşdeğer …




1
Çok basit koddan “Yasadışı donanım talimatı”
Şüpheli bir iddiayı araştırırken , bu küçük test programını yazdımnoway.c int proveit() { unsigned int n = 0; while (1) n++; return 0; } int main() { proveit(); return 0; } Bunu test, anladım: $ clang -O noway.c $ ./a.out zsh: illegal hardware instruction ./a.out Wat. Optimizasyon olmadan derlersem beklendiği …

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.