Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2008-05-18 12:17:45

  Kiera - Użytkownik

Kiera
Użytkownik
Zarejestrowany: 2006-12-14

odpowiednik isSet() z PHP dla C++ ?

Istnieje jakis odpowiednik funkcji isSet() z PHP w C++ ?

A może ktoś ma jakiś pomysł jak coś takiego napisać ?
Ja dopiero zaczynam z C++ i przydałaby mi się taka funkcja.

Ostatnio edytowany przez Kiera (2008-05-18 12:18:02)

Offline

 

#2  2008-05-18 12:34:13

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: odpowiednik isSet() z PHP dla C++ ?

dla wskażników:

#define IS_SET(x) (x != NULL)

Ale nie mam pojęcia po co taka funkcja w C++. Tu zmienne trzeba deklarować, nie tworzą się same....


[url=http://mhroczny.net][b]strona domowa[/b][/url] || [url=http://dug.net.pl][b]polski portal debiana[/b][/url]

Offline

 

#3  2008-05-18 12:48:13

  Kiera - Użytkownik

Kiera
Użytkownik
Zarejestrowany: 2006-12-14

Re: odpowiednik isSet() z PHP dla C++ ?

Deklarowac trzeba ale definiowac juz nie. Poprostu chce sprawdzic czy pewnej zmiennej int zostala przydzielona wartosc przez uzytkownika czy nie.

Offline

 

#4  2008-05-18 13:16:14

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: odpowiednik isSet() z PHP dla C++ ?

ale zmienna zadeklarowqana ma zawsze jakas wartosc ... i ciezko w ogolnosci ustalic czy jest ona z automaty (zazwyczaj to co bylo w pamieci) czy podana jawnie ... dlatego dobrym zwyczajem jest przypisywanie wartosci dla zmiennej ...

jezeli musisz sprawdzac czy uzytkownik ustawil a nie ma wartosci ktorej on nie uzywa bedziesz potrzebowal dodatkowej zmiennej kontrolnej ...


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#5  2008-05-18 14:17:41

  Kiera - Użytkownik

Kiera
Użytkownik
Zarejestrowany: 2006-12-14

Re: odpowiednik isSet() z PHP dla C++ ?

Dobra juz sobie poradzilem dodajac druga zmienna typu bool.

Offline

 

#6  2008-05-18 15:11:22

  bercik - Moderator Mamut

bercik
Moderator Mamut
Skąd: Warszawa
Zarejestrowany: 2006-09-23
Serwis

Re: odpowiednik isSet() z PHP dla C++ ?

dodam jeszcze ze zeby to ladnie zrobic to warto wlozyc te dwie zmienne w jakas strukture


"Wszyscy wiedzą, że czegoś zrobić nie można. Ale przypadkowo znajduje się jakiś nieuk, który tego nie wie. I on właśnie robi odkrycie." (A.Einstein)

Offline

 

#7  2008-05-21 12:04:18

  Kiera - Użytkownik

Kiera
Użytkownik
Zarejestrowany: 2006-12-14

Re: odpowiednik isSet() z PHP dla C++ ?

Ktoś może wie dlaczego kod napisany w geany i tam skompilowany 


Kod:

int main(int argc, char** argv)
{
    using namespace std;
    
    int const N=1000; //wymiar
    float A[N][N],B[N][N],C[N][N]; //macierze 
    for (int i=0;i<N;i++) for(int j=0;j<N;j++) C[i][j] = 0; //tutaj sie wywala. sprawdzilem.
}

wywala dla wartosci N>=835:

Kod:

./macierze_test
Naruszenie ochrony pamięci

O co chodzi?

Wczoraj zrobilem na windows (dev-cpp) tablice 10kx10k bez problemu i robilem na nich dzialania aczkolwiek to byly dynamiczne.

Offline

 

#8  2008-05-21 12:16:52

  shutdownrunner - Użytkownik

shutdownrunner
Użytkownik
Zarejestrowany: 2008-02-02

Re: odpowiednik isSet() z PHP dla C++ ?

O to już musisz zapytać jakiegoś znawcę g++. Przy deklaracji dwóch macierzy się nie wywala. Więc to kwestia kompilatora albo jakiegoś triku z pamięcią.


[url=http://www.lastfm.pl/music/%D0%A2%D0%B8%D0%BD%D0%B0+%D0%A7%D0%B0%D1%80%D0%BB%D1%8C%D0%B7]Тина Чарльз[/url]
[url=http://www.lastfm.pl/music/%D0%90%D0%B3%D0%B5%D0%BD%D1%82+%D0%A1%D0%BC%D0%B8%D1%82]Агент Смит[/url]

Offline

 

#9  2008-05-21 12:31:17

  Robot_ - Członek DUG

Robot_
Członek DUG
Skąd: Zabrzeg
Zarejestrowany: 2006-07-04

Re: odpowiednik isSet() z PHP dla C++ ?

wklej wynik z valgrinda
przekompilowałem ten kod i program kończy się bez błedu
i na przyszłość nie pisz tak kodu, przyjdzie taki czas że nie połapiesz się jak ten kod działa lub dodasz coś pod c[i][j] i będziesz się dziwił dlaczego to się w pętli nie wykonuje.

Kod:

int main(int argc, char** argv)
{
    using namespace std;
    
    int const N=1000; //wymiar
    float A[N][N],B[N][N],C[N][N]; //macierze 
    for (int i=0;i<N;i++) 
        for(int j=0;j<N;j++) 
            C[i][j] = 0; //tutaj sie wywala. sprawdzilem.
}

a najlepiej tak

Kod:

int main(int argc, char** argv)
{
    using namespace std;
    
    int const N=1000; //wymiar
    float A[N][N],B[N][N],C[N][N]; //macierze 
    for (int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++) 
        {
            C[i][j] = 0; //tutaj sie wywala. sprawdzilem.
        }
    }
}

pozdrawiam

-----------------------------------------------------
Edit:
Dobra u mnie też się wywala, tylko przy trochę większej wartości N

Kod:

==1054== Memcheck, a memory error detector.
==1054== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==1054== Using LibVEX rev 1732, a library for dynamic binary translation.
==1054== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==1054== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
==1054== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==1054== For more details, rerun with: -v
==1054==
==1054== Warning: client switching stacks?  SP change: 0x7FF000300 --> 0x7FE227498
==1054==          to suppress, use: --max-stackframe=14519912 or greater
==1054== Invalid write of size 4
==1054==    at 0x400533: main (in /var/home/rbidas/forum)
==1054==  Address 0x7FE22742C is just below the stack ptr.  To suppress, use: --workaround-gcc296-bugs=yes
==1054==
==1054== Process terminating with default action of signal 11 (SIGSEGV)
==1054==  Access not within mapped region at address 0x7FE22742C
==1054==    at 0x400533: main (in /var/home/rbidas/forum)
==1054==
==1054== Invalid write of size 8
==1054==    at 0x48022D8: _vgnU_freeres (vg_preloaded.c:56)
==1054==  Address 0x7FE227490 is on thread 1's stack
==1054==
==1054== Process terminating with default action of signal 11 (SIGSEGV)
==1054==  Access not within mapped region at address 0x7FE227490
==1054==    at 0x48022D8: _vgnU_freeres (vg_preloaded.c:56)
==1054==
==1054== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 5 from 1)
==1054== malloc/free: in use at exit: 0 bytes in 0 blocks.
==1054== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
==1054== For counts of detected errors, rerun with: -v
==1054== All heap blocks were freed -- no leaks are possible.
Segmentation fault

Tu masz wynik z valgrinda. Problem leży w stosie.
zrów tablice alokowane dynamicznie na stercie i będzie OK

Kod:

int main(int argc, char** argv)
{
    using namespace std;

            int const N=100100; //wymiar
                float **A = new float *[N];
                float **B = new float *[N];
                float **C = new float *[N];
                for( int i=0; i<N; ++i )
                {
                    A[i] = new float [N];
                    B[i] = new float [N];
                    C[i] = new float [N];
                }

                for (int i=0;i<N;i++)
                {
                    for(int j=0;j<N;j++)
                    {
                        C[i][j] = 0; //tutaj sie wywala. sprawdzilem.
                    }
                }


}

Ostatnio edytowany przez Robot_ (2008-05-21 12:42:34)


Nie dyskutuj z debilem. Najpierw sprowadzi Cię do swojego poziomu, a potem pokona doświadczeniem

Offline

 

#10  2008-05-21 16:58:57

  Kiera - Użytkownik

Kiera
Użytkownik
Zarejestrowany: 2006-12-14

Re: odpowiednik isSet() z PHP dla C++ ?

[quote=Robot_]wklej wynik z valgrinda[/quote]
Nawet nie umiem sie tym poslugiwac :)

[quote=Robot_]przekompilowałem ten kod i program kończy się bez błedu
i na przyszłość nie pisz tak kodu, przyjdzie taki czas że nie połapiesz się jak ten kod działa lub dodasz coś pod c[i][j] i będziesz się dziwił dlaczego to się w pętli nie wykonuje.[/quote]
Wiem o tym. To pisalem na szybko.

Ilosc max elementow na stosie zalezy od OS'a  czy od sprzetu ?

W WinXp ten sam progam wywalal sie przy N=400

Dzieki za pomoc.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)

[ Generated in 0.009 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00015 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00108 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.224.65.198' WHERE u.id=1
0.00073 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.224.65.198', 1732762136)
0.00044 SELECT * FROM punbb_online WHERE logged<1732761836
0.00058 SELECT topic_id FROM punbb_posts WHERE id=90995
0.00006 SELECT id FROM punbb_posts WHERE topic_id=11470 ORDER BY posted
0.00048 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=11470 AND t.moved_to IS NULL
0.00029 SELECT search_for, replace_with FROM punbb_censoring
0.00185 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=11470 ORDER BY p.id LIMIT 0,25
0.00084 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=11470
Total query time: 0.00654 s