【发布时间】:2016-04-27 16:58:13
【问题描述】:
为什么上面的 3 malloc 会崩溃?有时它们只适用于 (globale->dim_schema) > 10 或 (globale->dim_schema) >100
struct GLOBALE {
int dim_schema;
char *schema;
int *celle_usate;
char *punteggi;
char *percorso_aiuto;
struct LISTA_SOLUZIONI *soluzioni;
};
typedef struct GLOBALE *struct_globale;
void modalita_interattiva() {
int i;
char lettera;
char bonus;
char *parola;
struct_globale globale;
globale = malloc(sizeof(struct_globale));
if(globale == NULL) {
printf("Impossibile creare struct globale\n");
exit(EXIT_FAILURE);
globale->soluzioni = NULL;
do{
printf("Quanto grande e' lo schema di ruzzle che vuoi usare? (>0)\n");
scanf("%d", &(globale->dim_schema));
printf("Dimensione: %d \n", globale->dim_schema);
}while(globale->dim_schema<=0);
globale->celle_usate = malloc(globale->dim_schema * globale->dim_schema * sizeof(int)); <----CRASH
printf("celle usate\n");
globale->punteggi = malloc((globale->dim_schema) * (globale->dim_schema) * sizeof(char)); <----CRASH
printf("punteggi\n");
globale->schema = malloc(globale->dim_schema * globale->dim_schema * sizeof(char));<----CRASH
printf("schema\n");
...etc etc
【问题讨论】:
-
globale = malloc(sizeof(struct_globale));:struct_globale是struct GLOBALE的指针类型。这应该是globale = malloc(sizeof(*globale)); -
谢谢,我的命是你的!