Article View: pl.comp.lang.c
Article #303Dlaczego to dziala?!?!?!?
From: Michal A. Polak
Date: Fri, 14 Nov 1997 16:47
Date: Fri, 14 Nov 1997 16:47
56 lines
2240 bytes
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!usenetShow 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