SORU
14 EYLÜL 2010, Salı


&Quot;hack" teknik olarak tanımsız davranış yapı mı?

Hakkında ne sorduysam iyi "bir yapı vardır, değişken uzunluktaki" hile. son üye bilinir Şöyle bir şey:

struct T {
    int len;
    char s[1];
};

struct T *p = malloc(sizeof(struct T)   100);
p->len = 100;
strcpy(p->s, "hello world");

Çünkü o yapı olduğunu ortaya koydu bellek, edebiliyoruz kaplama yapı üzerinden bir daha gerekli blok ve tedavisinde son üyesi olarak daha büyük 1 char belirtildi.

Şimdi soru şu:Bu teknik, teknik olarak tanımlanmayan bir davranış mı?. Ama standart bu konuda ne diyor merak ettim de bu beklenirdi.

Bu C99 yaklaşım farkındayım, cevaplar yukarıdaki gibi özellikle hile sürümü için sopa istiyorum. PS:

CEVAP
14 EYLÜL 2010, Salı


Bu gibi C FAQ diyor ki:

Eğer yasal ya da taşınabilir ise net değil, ama oldukça popüler.

ve:

... resmi bir yorum C Standardı ile tam uyumlu olduğunu kabul etti, bununla birlikte ... ... bilinen tüm uygulamaları altında çalışmak gibi görünüyor. (Dizi sınırları kontrol eden derleyicileri dikkatle uyarılar sorun olabilir.)

Gerekçesi 'tam uyumlu' bit spec bölüm . arkasındaki ^strong>J. 2 Tanımsız davranıştanımsız davranış listesinde içerir:,

  • Dizi indis eğer bir nesnenin belirli bir alt lvalue ifade a[1][7] bildirimiint a[4][5]verilen () (6.5.6)görünüşte erişilebilir değilse bile kapsama alanı dışında, .

Bölüm, paragraf 86.5.6 Katkı operatörleritanımlanmış bir dizi sınır ötesi erişim tanımsız bir söz vardır:

Eğer her iki işaretçi işlenen ve sonuç noktası elementler aynı dizi nesne, ya da bir geçmiş son elemanı dizi nesne, değerlendirme olmayacaktır üretmek taşma; aksi halde, davranışı tanımsız.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BroadCity

    BroadCity

    10 ŞUBAT 2010
  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • Rickymon Tero

    Rickymon Ter

    1 Ocak 2007