Echo89 9 Web Developer

Fixed - skipped ever having to use an array. Although, I'd still like to know if I was right about the stack size, and what the best way might be to keep that many elements in an array.


Operating System: OS X 10.10 Yosemite (64 bit)



I've written this small program in D, as I want to teach myself more about compiled langauges, but I've encountered a small problem with the program ending because of a segmentation fault.

This program just calculates prime numbers up to ITERATIONS, and writes them to a file (and outputs them to tty). It works fine, to a point. For instance, if I set ITERATIONS to 100,000; it works just fine. If I set it to 1,000,000; it ends with a segmentation fault.

Output with 100,000:

Last login: Sun Oct 19 13:41:12 on ttys000
You have mail.
Caelans-MBP:~ Caelan$ /Users/Caelan/Dev/D/Testing/Primes ; exit;

9592 prime numbers calculated in 3.98622 seconds.

[Process completed]

Output with 1,000,000:

Last login: Sun Oct 19 13:41:39 on ttys000
You have mail.
Caelans-MBP:~ Caelan$ /Users/Caelan/Dev/D/Testing/Primes ; exit;
Segmentation fault: 11

[Process completed]

Now, I have a feeling that this is somethig to do with the stack size being to large, and that I would need to allocate memory. But I'm not sure, so I'd like to get confirmation beforehand.

Here is the actual code:

import std.stdio;
import std.math;
import std.datetime;
import std.file;

enum size_t ITERATIONS = 1000000;

bool divisible(real n) {
    real d;
    for(d = 3; d < floor(n / 2); d += 2) {
        if(fmod(n, d) == 0) {
            return true;

    return false;

void main() {
    StopWatch sw;
    size_t T = ITERATIONS;
    size_t C = 0;
    real n = 2;
    real[ITERATIONS] r;
    r[0] = n;
    for(n = 3; n < T; n += 2) {
        if(!divisible(n)) {
            r[C] = n;

    double seconds = cast(double)sw.peek().usecs / 1000000;
    writeln("\n\n", C, " prime numbers calculated in ", seconds, " seconds.");

    real[] f;
    f.length = C;
    f = r[0..C];
    File file = File("primes.txt", "w");
    file.writeln(C, " prime numbers calculated in ", seconds, " seconds.");
    foreach(number; f) {
    file.writeln("\n", "end");

Thanks in advance!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.