«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.



9
8 bitlik bir tam sayıdan 8 bitten daha büyük bir değeri nasıl elde ettim?
Bu küçük mücevherin arkasında saklanan son derece kötü bir böceği buldum. C ++ spesifikasyonuna göre, işaretli taşmaların tanımsız davranışlar olduğunu, ancak yalnızca değer bit genişliğine genişletildiğinde taşma gerçekleştiğinde farkındayım sizeof(int). Anladığım kadarıyla, a'yı artırmak charasla tanımsız bir davranış olmamalı sizeof(char) < sizeof(int). Ancak bu, nasıl imkansız bir değer celde edildiğini …

8
"Struct hack" teknik olarak tanımlanmamış bir davranış mı?
Sorduğum şey, iyi bilinen "bir yapının son üyesinin değişken uzunluklu" numarasıdır. Şöyle bir şey oluyor: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; strcpy(p->s, "hello world"); Yapının belleğe yerleştirilme şekli nedeniyle, yapıyı gerekenden daha büyük bir bloğun üzerine yerleştirebilir …

2
C ++ 20'ye kadar tanımsız davranış için malloc kullanıyor
Aşağıdaki kodun C ++ 20'ye kadar tanımsız davranışa sahip olduğu söylendi: int *p = (int*)malloc(sizeof(int)); *p = 10; Bu doğru mu? Argüman, intdeğer atanmadan önce nesnenin yaşam süresinin başlamamasıydı ( P0593R6 ). Sorunu çözmek için yerleşim newkullanılmalıdır: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; Nesnenin yaşam süresini …


8
Tanımlanmamış davranışa sahip dalların erişilemez olduğu ve ölü kod olarak optimize edilebileceği varsayılabilir mi?
Şu ifadeyi düşünün: *((char*)NULL) = 0; //undefined behavior Açıkça tanımlanmamış davranışa neden olur. Belirli bir programda böyle bir ifadenin varlığı, tüm programın tanımsız olduğu veya davranışın yalnızca kontrol akışı bu ifadeye ulaştığında tanımsız hale geldiği anlamına mı gelir? Kullanıcının numarayı hiç girmemesi durumunda aşağıdaki program iyi tanımlanmış olur 3mu? while …

10
Neden printf (“% f”, 0); tanımsız davranışlar mı veriyor?
İfade printf("%f\n",0.0f); 0 yazdırır. Ancak ifade printf("%f\n",0); rastgele değerler yazdırır. Bir tür tanımlanmamış davranış sergilediğimin farkındayım, ancak nedenini tam olarak anlayamıyorum. Tüm bitlerin 0 olduğu bir kayan nokta değeri, hala 0 floatdeğeriyle geçerlidir floatve intmakinemde aynı boyuttadır (bu bile alakalıysa). Neden printfbu davranışa neden olarak kayan noktalı değişmez değer yerine …


4
Tanımlanmamış davranış içeren kaynak kodun derleyiciyi çökertmesi yasal mı?
Diyelim ki tanımlanmamış bir davranışı çağıran kötü yazılmış C ++ kaynak kodunu derlemeye gittiğimi ve bu nedenle (dedikleri gibi) "her şey olabilir" diyelim. C ++ dil spesifikasyonunun bir "uyumlu" derleyicide kabul edilebilir gördüğü bakış açısından, bu senaryoda "herhangi bir şey" derleyicinin çökmesini (veya parolalarımı çalmasını veya derleme zamanında yanlış davranma …

5
Tanımsız davranış ve sıra noktaları yeniden yüklendi
Bu konuyu aşağıdaki konunun bir devamı olarak düşünün: Önceki taksit Tanımlanmamış davranış ve sıra noktaları Bu komik ve kıvrımlı ifadeyi tekrar gözden geçirelim (italik ifadeler yukarıdaki konudan alınmıştır * gülümseme *): i += ++i; Bunun tanımsız davranışı çağırdığını söylüyoruz. Bunu derken, biz örtülü farz farz türü arasında iyerleşik türlerinden biridir. …

3
C ++ 'da işaretli tamsayı taşması hala tanımsız bir davranış mı?
Bildiğimiz gibi, işaretli tamsayı taşması tanımsız bir davranıştır . Ancak C ++ 11 cstdintbelgelerinde ilginç bir şey var : tam olarak 8, 16, 32 ve 64 bit genişliğinde, doldurma bitleri olmadan ve negatif değerler için 2'nin tümleyicisini kullanan işaretli tamsayı türü (yalnızca uygulama doğrudan türü destekliyorsa sağlanır) Bağlantıya bakın Ve …




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.