🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #303

Dlaczego to dziala?!?!?!?

#303
From: Michal A. Polak
Date: Fri, 14 Nov 1997 16:47
56 lines
2240 bytes
Jest nastepujacy program (uruchomiony na linuxie - gnu cc - oraz win95
skompilowany builderem, po niewielkich przerobkach):

---------------------------------------------------------------
#include<stdio.h>

class CCos
{
public:
  int a;
  int b;
  int ple() {return a*b;}
};

typedef struct
{
  CCos *me;
  char c[8];
} TCos;

int main()
{
  TCos ala;
  ala.me = (CCos *) &ala;
  ((CCos *)&ala)->a = 2;
  ((CCos *)&ala)->b = 3;

  printf("%d\n",((CCos*) &ala)->ple());

  return 0;
}

---------------------------------------------------------------

Zdaje sobie sprawe, ze calosc jest z deka bezsensowna, ale sa powody,
dla ktorych cos takiego bylo mi potrzebne - tzn. ze chcialem "wsadzic"
obiekt klasy CCos w zmienna strukturalna TCos.
Pytanie zostalo przedstawione w tutule, z tym  ze nie chodzi mi o
dzialanie kodu programu przedstawionego powyzej, lecz po malych
zmianach, tj, gdy:
- w strukturze TCos jedna lub obie zmienne zostaje zakomentowane
- i/lub  wywalmy linie: ala.me = (CCos *) &ala;

Po wykonaniu przy najmniej jednego z powyzszych krokow program powinien
sie sypnac, co nie nastepuje.
Proste wytlumaczenie jest takie, ze wszystkie odwolania do zmiennej ala
odnosza sie do "gdzies" na stercie, ktora nalezy do programu, zatem nie
wystapi blad ochrony.
Moze sie myle i bylbym wdzieczny za korekcje, a najcheteniej za jakas
sugestie, ktora by jednak przyczynila sie do wywalenia programu :-).
Wydaje sie dziwne (a moze nie?), ze program _zawsze_ na _roznych_
systemach, trafia w obszar sterty (jak przyjalem), a moze jest to
"ochrona" wbudowana w kompilator???

Pozdrawiam,
  Michal
Technical Details
Message-ID: <346C80A9.B046A500@bss.com.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!news.nask.pl!usenet

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!uw.edu.pl!news.icm.edu.pl!news.nask.pl!usenet
From: "Michal A. Polak" <M.Polak@bss.com.pl>
Newsgroups: pl.comp.programming,pl.comp.lang.c,pl.comp.lang.delphi
Subject: Dlaczego to dziala?!?!?!?
Date: Fri, 14 Nov 1997 17:47:37 +0100
Organization: BSS Polska Ltd.
Lines: 64
Message-ID: <346C80A9.B046A500@bss.com.pl>
NNTP-Posting-Host: marcin.bss.com.pl
Mime-Version: 1.0
X-Mailer: Mozilla 4.01 [en] (Win95; I)
X-Priority: 3 (Normal)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit