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....

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ą.

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++ ?

Robot_ napisał(-a):

wklej wynik z valgrinda

Nawet nie umiem sie tym poslugiwac :)

Robot_ napisał(-a):

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.

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
Możesz wyłączyć AdBlock — tu nie ma reklam ;-)