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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
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
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
Deklarowac trzeba ale definiowac juz nie. Poprostu chce sprawdzic czy pewnej zmiennej int zostala przydzielona wartosc przez uzytkownika czy nie.
Offline
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 ...
Offline
Dobra juz sobie poradzilem dodajac druga zmienna typu bool.
Offline
dodam jeszcze ze zeby to ladnie zrobic to warto wlozyc te dwie zmienne w jakas strukture
Offline
Ktoś może wie dlaczego kod napisany w geany i tam skompilowany
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:
./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
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
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.
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
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
==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
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)
Offline
[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
Strony: 1
Time (s) | Query |
---|---|
0.00013 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00097 | 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='3.146.206.246' WHERE u.id=1 |
0.00078 | UPDATE punbb_online SET logged=1732762516 WHERE ident='3.146.206.246' |
0.00045 | SELECT * FROM punbb_online WHERE logged<1732762216 |
0.00076 | SELECT topic_id FROM punbb_posts WHERE id=91215 |
0.00007 | SELECT id FROM punbb_posts WHERE topic_id=11470 ORDER BY posted |
0.00053 | 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.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00179 | 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.00076 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=11470 |
Total query time: 0.00635 s |