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;
}