On 22.11.2014 20:26, Ali Çehreli wrote:
On 11/22/2014 07:07 AM, drug wrote:

 > On 22.11.2014 19:34, ketmar via Digitalmars-d-learn wrote:
 >> On Sat, 22 Nov 2014 18:20:44 +0400
 >> drug via Digitalmars-d-learn<digitalmars-d-learn@puremagic.com> wrote:
 >>
 >>> I tried to pass pointer to static array but it didn't work.
 >> i tried it right now and it works.
 >>
 >> if you really want to get some help, you'd better give us something to
 >> start with. i.e. your code, minified. D is great, but it still can't
 >> grant telepathic abilities to us.
 >
 > Sorry for inconvenience.
 > http://dpaste.dzfl.pl/64ab69ae80d2
 > this causes stackoverflow because static array is big enough.

If it overflows the stack just because there are two copies on it, then
it will overflow for one of them in the future. (Say, after adding
another variable to main.)

For example, the following program has the same problem on my system
without passing any argument:

import std.stdio;

enum A = 65536;
enum B = 50;

alias MyType = int[A][B];

void main()
{
MyType arr;
}

make: *** [deneme] Segmentation fault

 > I'd like to pass it not by value to avoid stack overflowing. Even if
I use
 > ref dmd pass it by value.

I would dynamically allocate the storage. There is the following
convenient syntax:

import std.stdio;

enum A = 65536;
enum B = 1000; // <-- Much larger now

alias MyType = int[][];

void foo(ref MyType arr)
{
writeln(arr[3][40]);
}

void main()
{
auto arr = new int[][](B, A); // <-- "A elements of int[B] each"
foo(arr);
}

Ali

I did like you suggested, thank you.

Reply via email to