SIG11 crashing - can't figure it out
John Colvin via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 15 04:44:30 PDT 2015
On Friday, 15 May 2015 at 11:08:06 UTC, Rob Pieké wrote:
> Working my way through Ali Çehreli's rather amazing e-book,
> I've hit a snag where some code I've written is pretty crashy.
> I consistently get "Segmentation fault: 11" (dmd 2.067.1, OSX).
>
> I can't figure out where things are going wrong, because any
> attempt I make to debug via extra print statements causes the
> program to run successfully. Same if I try to compile with
> "-gc" ... it suddenly starts working, so I can't debug with gdb.
>
> Putting aside any "that's probably not a great solution to the
> problem you're tying to solve" thoughts, can anyone offer me
> the "eureka" moment I'm missing to understand why the code
> below doesn't work?
>
> Many thanks in advance!
>
> * * *
>
> import std.stdio;
>
> enum Suit {
> HEARTS, DIAMONDS, CLUBS, SPADES
> }
>
> enum Value {
> ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN,
> JACK, QUEEN, KING
> }
>
> struct Card {
> Value value;
> Suit suit;
> }
>
> void printCard(in Card card) {
> final switch(card.value) {
> case Value.ACE:
> write("A");
> break;
> case Value.TWO, Value.THREE, Value.FOUR, Value.FIVE,
> Value.SIX, Value.SEVEN, Value.EIGHT, Value.NINE, Value.TEN:
> writef("%d", card.value);
> break;
> case Value.JACK:
> write("J");
> break;
> case Value.QUEEN:
> write("Q");
> break;
> case Value.KING:
> write("K");
> break;
> }
> final switch(card.suit) {
> case Suit.HEARTS:
> write("♡");
> break;
> case Suit.DIAMONDS:
> write("♢");
> break;
> case Suit.CLUBS:
> write("♣");
> break;
> case Suit.SPADES:
> write("♠");
> break;
> }
> write("\n");
> }
>
> int main() {
> auto card = Card(Value.JACK, Suit.CLUBS);
> printCard(card);
> return 0;
> }
It seems to be DMD specific, it works fine with ldc. If you're a
homebrew user, brew install ldc and try it for yourself.
P.s. you can use the `with` statement to make things less verbose:
import std.stdio;
enum Suit {
HEARTS, DIAMONDS, CLUBS, SPADES
}
enum Value {
ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN,
JACK, QUEEN, KING
}
struct Card {
Value value;
Suit suit;
}
void printCard(in Card card) {
final switch(card.value) with(Value) {
case ACE:
write("A");
break;
case TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN:
writef("%d", card.value);
break;
case JACK:
write("J");
break;
case QUEEN:
write("Q");
break;
case KING:
write("K");
break;
}
final switch(card.suit) with(Suit) {
case HEARTS:
write("♡");
break;
case DIAMONDS:
write("♢");
break;
case CLUBS:
write("♣");
break;
case SPADES:
write("♠");
break;
}
write("\n");
}
void main() {
auto card = Card(Value.JACK, Suit.CLUBS);
printCard(card);
}
More information about the Digitalmars-d-learn
mailing list