Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
777 views
in Technique[技术] by (71.8m points)

linux - Segmentation fault due to lack of memory in C

This code gives me segmentation fault about 1/2 of the time:

int main(int argc, char **argv) {
    float test[2619560];
    int i;
    for(i = 0; i < 2619560; i++)
        test[i] = 1.0f;
}

I actually need to allocate a much larger array, is there some way of allowing the operating system to allow me get more memory?

I am using Linux Ubuntu 9.10

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You are overflowing the default maximum stack size, which is 8 MB.

You can either increase the stack size - eg. for 32 MB:

ulimit -s 32767

... or you can switch to allocation with malloc:

float *test = malloc(2619560 * sizeof test[0]);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...