Supportvragen Mac > Programmeren in bijvoorbeeld C(++), Cocoa, Java, BASIC, en Swift
[C++] Signal 10 (SIGBUS)
minne:
Ik heb hier een programmaatje dat uitstekend compileert, maar als je hem draait, stopt het programma voortijdig met foutcode 10 (SIGBUS). Nazoeken van mij leerde me dat het een allocatie van verkeerd geheugen betekent. Een beetje debuggen met cout-regeltjes leerde me echt dat de fout in de volgende regel optreedt:
--- Code: ---int random = (rand () / RAND_MAX) * m_numberPossibilities;
--- Einde van code ---
Wat is er nu zo raar aan deze regel? m_numberPossibilities is een integer met een waarde van ongeveer 70000...
iPanda:
Hoi, C++ is voor mij al een tijdje gelden, maar er zijn 3 dingen die ik me afvraag:
1. wat is de waarde van RAND_MAX?
2. wat is de maximum waarde van je int? Als je pech hebt is dat maximaal 65535.
3. wordt je / operatie, wat een gebroken getal op kan leveren (of was dat div?), automatisch geconverteerd naar een geheel getal? Want je kan alleen een geheel getal in je int stoppen.
minne:
Die waarde van RAND_MAX staat gedefinieerd in stdlib.h. Ik heb die eens nagezocht en die is echt ontzaglijk groot. Dat past nog niet in een unsigned long int. Maar rand () returneert wel een int :?
Hoe los ik dit nu op?En als je twee integers deelt doe je toch een integerdeling en krijg je altijd een geheel getal? Dacht ik toch... :)
iPanda:
Weet je het zeker dat rand() een int returned? Meeste random functies geven een waarde tussen 0 en 1 terug. Maar zoals ik al zei, C++ is voor mij lang geleden.
minne:
Volgens de specificatie in stdlib.h wel (die je krijgt als je Appletje dubbelklikt op rand () in Project Builder). Als je double i = rand () doet, slikt ie dat ook niet...
Bestaat er geen GCC 3.3 API (dat is toch de compiler bij de Developer Tools?). Op gcc.gnu.org vind ik die niet. Alle C++-voorbeelden met rand () die ik vind, gaan uit van een veel kleinere RAND_MAX :?
Navigatie
[0] Berichtenindex
[#] Volgende pagina
Naar de volledige versie