SORU
24 EYLÜL 2013, Salı


En basit standart C içinde bir Segfault üretmek için uygun yol nedir?

Bu soru her şeyi açıklıyor sanırım. Bir örnek C11 için C89 en standartları kapsayan yararlı olacaktır. Bu aklıma, ama tanımsız davranış olur sanırım:

#include <stdio.h>

int main( int argc, char* argv[] )
{
  const char *s = NULL;
  printf( "%c\n", s[0] );
  return 0;
}

DÜZENLEME:

Her zamanki programlama hatası (aklıma gelen en basit bir segfault) ile bir program yapmak istedim . biraz oy olarak açıklama talep: ^em>garantili(standart) tarafından iptal. Bu sigorta umurunda değil ki en az segfault soru için farklıdır.

CEVAP
24 EYLÜL 2013, Salı


Bölümleme hatasıuygulama davranışı tanımlanmışstandart uygulama undefined behavior ile mücadele etmesi nasıl tanımlamaz ve hatta uygulama dışarı optimize olabilirtanımsız davranışve yine de uyumlu olacak. Açık olmakuygulama davranışı tanımlanmışstandart 7* *olmayan bir davranıştır ama uygulama belge gerekir.Tanımsız davranışöngörülemeyen ve bu nedenle olan non-taşınabilir ya da hatalı olmasıdır kodu dayanıyordu olamaz.

C99 draft standard bölümünde 3.4.3 bakacak olursaktanımsız davranışaltında gelirTerimler, tanımlar ve sembollerparagraf bölümünde1o diyorvurgu benim ve ileri doğru gidiyor):

hatalı veri, nonportable ya da hatalı bir program kullanımı üzerine inşa veya davranış olan buUluslararası Standart gereksinimlerini etkiler

ve paragrafta2diyor ki:

NOT Olası tanımsız davranış aralığından görmezden durum tamamen tahmin edilemeyen sonuçlar, davranış sırasında çeviri veya program yürütme bir şekilde belgelenmiş karakteristik çevresi (ile veya olmadan verildiği bir tanılama iletisi), sonlandırıcı bir çeviri ya da yürütme ile sanayi üretimi, bir tanılama iletisi).

Edit

Diğer taraftan, eğer sadece en bölümleme hatası neden olacak bir yöntem standardında tanımlanan istiyorumUnix-gibisistemleri raise( SIGSEGV ) sonra da bu hedefe ulaşmak gerekir. Açık konuşmak gerekirse, ancak SIGSEGV aşağıdaki gibi tanımlanır

Depolama için geçersiz bir erişim SIGSEGV

Bölüm 7.14Sinyal işlemediyor ki:

Bir uygulama bu sinyallerin herhangi bir istisna hariç olmak üzere, kesin bir sonuç üretmek zorunda değildir zam işlevini çağırır. Undeclarable fonksiyonları için ek işaretler ve işaretçiler makro tanımları sırasıyla, SIG harfleri ile başlayan ve bir büyük mektup veya SİG_ ve büyük harf,219) da belirttiği olabilir uygulama.Sinyaller, onların semantiği ve varsayılan işleme komple set uygulama tanımlı; tüm sinyal sayılar pozitif olacaktır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • HowcastSportsFitness

    HowcastSport

    11 Mayıs 2011
  • The Exploiteers

    The Exploite

    4 Ocak 2011