Het uiteindelijke probleem dat ik heb is dat een (lang)lopende C-applicatie een segmentation fault veroorzaakt en core dumpt, waardoor ik het vermoeden heb dat er ergens met de geheugentoewijzing en het uitlezen niet goed gaat, bijvoorbeeld arrays die buiten de boundaries worden gelezen.
De applicatie draait op een Sun SPARC met Solaris 2.8.
Ik heb verschillende memory debuggers gevonden die geheugen dat ge-malloc-ed en niet ge-free-d wordt kunnen opsporen, bijvoorbeeld Electric Fence, MPatrol en CheckerGCC. Geen van deze tools vindt fouten in de volgende code:
Ik heb me al afgevraagd waarom dit niet tot problemen leidt, misschien komt dit omdat geheugenpagina's in blokken worden toegekend in plaats van per byte? Als ik namelijk als index 4000 gebruik in plaats van '4' dan komt er wel een segmentation fault die getrapt wordt door MPatrol.
Is het mogelijk om dit soort kleine afwijkingen in de addressering van arrays en andere variabelen te achterhalen met een bepaalde tool? Valgrind kan ik volgens mij niet gebruiken omdat dat alleen op een x86-achtig platform werkt.
Elke hint of tip is welkom.
De applicatie draait op een Sun SPARC met Solaris 2.8.
Ik heb verschillende memory debuggers gevonden die geheugen dat ge-malloc-ed en niet ge-free-d wordt kunnen opsporen, bijvoorbeeld Electric Fence, MPatrol en CheckerGCC. Geen van deze tools vindt fouten in de volgende code:
code:
1
2
3
4
5
| int main(int argc, char** argv) {
int test[2];
test[4] = 9;
return 0;
} |
Ik heb me al afgevraagd waarom dit niet tot problemen leidt, misschien komt dit omdat geheugenpagina's in blokken worden toegekend in plaats van per byte? Als ik namelijk als index 4000 gebruik in plaats van '4' dan komt er wel een segmentation fault die getrapt wordt door MPatrol.
Is het mogelijk om dit soort kleine afwijkingen in de addressering van arrays en andere variabelen te achterhalen met een bepaalde tool? Valgrind kan ik volgens mij niet gebruiken omdat dat alleen op een x86-achtig platform werkt.
Elke hint of tip is welkom.
Remember, if you have any trouble you can always send a telegram to the Right People.