Forum huvudsida -> Programmering -> Kommentarer på en hash table
Sidor: 1
Aderyn | 20:51 - 21:a April 2007 | Post #1 | |
Medlem Inlägg: 27 Skicka PM |
Tja, (Jag fick syn på blinkenlightströjor som sprang runt på dh och blev medlem i samband med det men har inte orkat skriva förut.) Jag tänkte skriva en irc-server i C för att lära mig. Har ett antal års erfarenhet av programmering i olika språk, men jag är inte så van vid just C. Tänkte att jag skulle göra ett halvstort projekt för att komma in i det. Följande hash table är tänkt att användas för användar-listan resp. kanal-listan så jag kan göra snabba lookups. Eventuella kommentarer på valet av datastruktur är också av intresse. På freenode mumlade någon något om att ett träd skulle vara bättre, men jag känner ändå att en hashtable borde fungera. Koden fungerar men jag antar att det finns en del minnesläckor, och säkert en del systemfel/dålig vanor som är svåra för mig som författare att se. Av någon anledning jag inte riktigt kan sätta fingret på så får free(cur); i hashtable_delete glibc att hoppa ur och ge en traceback också. http://lanfear.c0la.se/~emil/hashtable.txt /a> - Emil ------------------------- Ingen signatur! Senast redigerad 20:52 - 21:a April 2007 |
Slash | 01:49 - 22:a April 2007 | Post #2 | |
Medlem Inlägg: 141 Skicka PM |
I just en IRC-klient spelar det nog inte så otroligt stor roll, tror en hashtable kan fungera bra. Angående dina problem så vet jag inte vad du använder för C-kompilator, men det kompilerar inte för mig. Använder jag en C++-kompilator så kompilerar det åtminstone, då hittade jag att du har allokerat för lite minne på rad (runt) 78. D.v.s:
som allokerar på tok för lite minne. Verkar vara ett genomgående tema när du allokerar minne. Tänk på att när du ska allokera minne till 5 my_struct:ar så är det:
och inte
Eftersom du då bara får storleken på en pekare (som på många platformar bara är 4 bytes). Rätta till det och se om det fungerar åtminstone lite bättre Lycka till med din fortsatta C-programmeringskarriär! ------------------------- Ingen sigantur! |
Aderyn | 02:55 - 22:a April 2007 | Post #3 | |
Medlem Inlägg: 27 Skicka PM |
Kompilerar under gentoo med gcc. gcc version 3.4.6 (Gentoo 3.4.6-r1, ssp-3.4.5-1.0, pie-8.7.9) Tack för påpekandet med minnesallokeringen. Funderat på det, men inte varit säker. Löste även problemet med att glibc klagade på minneskorruption. ------------------------- Ingen signatur! Senast redigerad 03:00 - 22:a April 2007 |
sdac | 13:48 - 23:e April 2007 | Post #4 | |
Medlem Inlägg: 235 Skicka PM |
Använd valgrind i fortsättningen när du löser minnesrelaterade problem så tjänar du några timmars fundering. Eftersom du använder gentoo så: emerge -av valgrind Sen startar du programmet hel vanligt fast under valgrind, t.ex.: valgrind ./a.out Annars: http://valgrind.org/ EDIT: Valgrind skulle även ha upptäckt problemet du hade, t.ex. att man allokerar plats för en int* (dvs, storleken på pekaren) och refererar till det som en int x[y] där &x+y*sizeof(int) blir högre än &x+sizeof(void*). Liknande problem märks ibland inte utan valgrind, t.ex. på 64-bitars system har pekare storlekar på 8 byte, vilket ger en plats för två 32-bitars integervärden som oftast även på 64-bitars system denoteras med 'int'. Men valgrind upptäcker det. Senast redigerad 16:20 - 24:e April 2007 |
Sidor: 1
Forum huvudsida -> Programmering -> Kommentarer på en hash table
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-07 13:44
Vecka: 19
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.