o que está causando o SIGSEV?

/ *

aprendendo com todo o post - me corrija se eu estiver errado ..

agora faz sentido - se bem me lembro, a pilha é um segmento de memória fixa - alocado na inicialização do programa ... enquanto a memória virtual pode ser dimensionada / redimensionada programaticamente usando malloc, realloc, free ... o array do ponteiro struct -

tamanho longo = 10000000; struct foo * bar [tamanho];

deveria ter sido alocado do heap - usando malloc () ... em vez de apenas uma pilha de tamanho fixo (texto do programa)

* /

Este SIGSEV:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    struct foo {
        int x;
        char s[5];
    };

    long size = 10000000;
    struct foo *bar[size];

    long i = 0;
    while (i < size) {
        printf("%ld \n", i);
        i++;
    }
}

Este funciona - comentando ostruct foo matriz de ponteiro:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    struct foo {
        int x;
        char s[5];
    };

    long size = 10000000;
    //struct foo *bar[size];

    long i = 0;
    while (i < size) {
        printf("%ld \n", i);
        i++;
    }
}

Este funciona - comentando o nossowhile ciclo:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    struct foo {
        int x;
        char s[5];
    };

    long size = 10000000;
    struct foo *bar[size];

    long i = 0;

    while (i < size) {
        //printf("%ld \n", i);
        i++;
    }

}

/ * o que realmente estou tentando conseguir é isso ... qual SIGSEVS - ok, obrigado por todas as suas respostas, eu realmente aprecio isso ... - parecerá int stack overflow e usará explorar usando a memória heap-- obrigado pessoal * /

int main (vazio) {

struct foo {
    int x;
    char s[5];
};

long size = 10000000;
struct foo *bar[size];

long i = 0;
while (i < size) {
    bar[i] = (struct foo *) malloc(sizeof(struct foo));
    free(bar[i]);
    i++;
}
return EXIT_SUCCESS;

}

questionAnswers(3)

yourAnswerToTheQuestion