Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Странный глюк со структурами


Автор: ressac 13.4.2009, 13:28
есть вот такое чудо smile))


Код

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

#define NELM 5
#define NCUR 5
#define NASG 15
#define NFOT 50
#define NCAR 100+1

typedef struct
{
   char descripcion[NCAR];
   int id;
   float precio;
   int cantidad;
}Fotocopias;

typedef struct
{
   char nombre[NCAR];
   int TAM;
   Fotocopias fotocopia[NFOT];
}Asignaturas;

typedef struct
{
   char nombre[NCAR];
   int TAM;
   Asignaturas asignatura[NASG];

}Cursos;

typedef struct
{
   char nombre[NCAR];
   int TAM;
   Cursos curso[NCUR];
}Carreras;

void main()
{
   Carreras carrera[NELM];
}



если NELM, больше чем 5 или равно 5, то при запуске вылетает ошибка памяти

пробовал под вистой и под хрюшой

Автор: Alek86 13.4.2009, 13:34
возможно, sizeof(Carreras[5]) слишком большой для стека - лень считать

Автор: azesmcar 13.4.2009, 13:37
ressac

Тебе стек не жалко???
у тебя Stack Overflow..создавай в куче
Код

Carreras *carrera = new Carreras[NELM];



Автор: Alek86 13.4.2009, 13:37
таки посмотрел
sizeof(Carreras) == 443748

5 * sizeof(Carreras) - больше двух метров стека

Автор: azesmcar 13.4.2009, 13:38
да..и еще..
#define NCAR 100+1
такие макросы всегда бери в скобки.
Код

#define NCAR (100+1)

потом проблемы будут..например NCAR * NCAR вернет совсем не то что ты предполагаешь.

Автор: Alexeis 13.4.2009, 13:44
Цитата(azesmcar @  13.4.2009,  12:37 Найти цитируемый пост)
у тебя Stack Overflow..создавай в куче

  Можно, в принципе, увеличить размер стека в опциях компилятора. Поставить например 5Мб. Вот только сомнителен факт, что переменная такого размера должна существовать лишь на время выполнения функции...

Автор: azesmcar 13.4.2009, 13:46
Цитата

  Можно, в принципе, увеличить размер стека в опциях компилятора. Поставить например 5Мб. Вот только сомнителен факт, что переменная такого размера должна существовать лишь на время выполнения функции...


можно..но нужно ли? не думаю. Такие обьекты лучше создавать в куче.

Автор: Alexeis 13.4.2009, 14:16
azesmcar, мало ли. Вообще да, в таких случаях скорость выделения памяти некритичный фактор. 

Автор: ressac 13.4.2009, 16:44
ясно, спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)