SORU
3 Aralık 2014, ÇARŞAMBA


İşaretçi bir p için, p < 1 aşırı bir durumda yanlış p olabilir mi?

Mümkün, bir işaretçi değişkeni içinpbup&; ( . lt ^strong>p 1yanlış mı? Cevabınızı açıklayınız. Evet, hangi şartlar altında bu mümkün mü? eğer

P 1 taşma ve 0'a eşit olabilir mi merak ediyorum.

E. g.Bir 64-bit GCC-4.8 ile PC için bir C-dil programı:

int main(void) {
   void *p=(void *)0xFFFFFFFFFFFFFFFF;

   printf("p      :%p\n", p);
   printf("p 1    :%p\n", p 1);
   printf("Result :%d\n", p<p 1);
}

Döner:

p      : 0xffffffffffffffff
p 1    : (nil)
Result : 0

Bu durumda mümkün olduğuna inanıyorum. Geçersiz bir işaretçi konumu için olabilir. Bu aklıma gelen tek çözüm. Başkaları da var mı?

Not: Hayır varsayımlar yapılır. Bu başına gelebilecek bir şans olduğunu ya da değil, herhangi bir derleyici/platform/mimarlık/OS düşünün.

CEVAP
3 Aralık 2014, ÇARŞAMBA


Mümkün, pointer değişken p<(p 1) yanlış p için mi?

p doğru türde geçerli bir nesne (C nesne modeline göre oluşturulan) işaret ediyorsa, o zaman hayır. p 1 nesne sonra bellek konumuna işaret edecek, ve her zaman p daha karşılaştırır.

Aksi halde, aritmetik ve karşılaştırma her iki davranışı sonucu doğru, yanlış, ya da sarı bir kızarma olabilir yani tanımsız.

Evet, hangi şartlar altında bu mümkün mü? eğer

Ya da olmayabilir, olabilir

p = reinterpret_cast<char*>(numeric_limits<uintptr_t>::max);

Eğer işaretçi aritmetiği işaretsiz tamsayı aritmetik gibi çalışırsa, o zaman bu sayısal bir taşma p 1 değeri sıfır olan ve daha az p daha karşılaştıran bu tür neden olabilir. Ya da başka bir şey olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • DorkmanScott

    DorkmanScott

    14 NİSAN 2006
  • SaMmM123

    SaMmM123

    3 Mayıs 2006