tipos segmentacion psicograficas psicografica productos mercado ejemplos ejemplo consumidor conductual caracteristicas c segmentation-fault

psicograficas - variables de segmentacion de mercado



Problema de falla de segmentación(C) (5)

¿Qué tan grande es un Level ? ¿Es posible que desbordes tu pila? Dado que, al parecer, (al parecer) solo hay un objeto Game de todos modos, quizás sería mejor que utilizaras la clase de almacenamiento static , como en: static Game g;

Editar: si desea forzar la asignación en el montón, le aconsejo usar los std::vector<Level> levels; en lugar de usar punteros directamente. Vaya, se ha perdido la etiqueta C, no C ++.

Tengo una estructura llamada Game con una matriz de niveles, definida así:

typedef struct { Level levels[x]; } Game;

Cuando compilo el código, si x es 1, 2 o 3, el programa se ejecuta normalmente. Si es cualquier otro valor (4, por ejemplo), aparece un error de segmentación. No estoy accediendo a la matriz en ninguna parte. Main es algo como esto en este momento (comentó todo menos la inicialización):

int main (...) { Game g; return 0; }

¿Alguna pista de lo que podría ser esto?

Gracias por adelantado.


En mi máquina, este código

typedef struct { char data[65536*4]; } Level; typedef struct { Level levels[4]; } Game; int main (...) { Game g; return 0; }

se bloquea, mientras que no lo hace si cambio el tamaño de la matriz de levels a 3 .

Debe reducir el tamaño de su tipo de Level (colocando datos en el montón en lugar de la pila) o poner sus niveles en el montón (manteniéndolos en una serie de punteros a objetos de Level asignados dinámicamente).


Por lo general, en casos similares debe declarar la variable estática:

int main(void) { static struct foo bar[SIZE]; return 0; }

Por lo tanto, la variable se habrá asignado e insertado en el área estática en tiempo compilado.


Si de hecho tiene el tamaño de sus datos e insiste en tenerlo asignado, tal vez sea una opción establecer el tamaño de la pila en el enlazador. Si me equivoco, corrígeme ya que me parece interesante este tema


Si la clase / estructura de nivel es realmente grande, podrías intentar usar esto:

typedef struct { Level *levels; } Game;

y luego asignar sus niveles con malloc () o nuevo. O si realmente necesita una variedad de niveles:

typedef struct { Level* levels[NUM_LEVELS]; } Game;

luego asignando niveles con algo como esto:

// Allocate levels int i; for(i=0;i<NUM_LEVELS;i++) { gameStruct.levels[i] = (Level*)malloc(sizeof(Level)); initLevelNum(gameStruct.levels[i], i); }