Здравствуйте.
Столкнулся с проблемой когда при выполнении файла, выдается ошибка, о том что сегментация потеряна.
Приведу текст программы:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define STRATEGY_MAXNUM 6 // максимальное количество стратегий
#define PASS_MAXNUM 200 // максимальное количество прогонов
// структура статистики по отдельной стратегии
/*typedef struct {
int task_num[PASS_MAXNUM];
} SSTAT;
*/
// структураOC статистики выполнения заданий
typedef struct {
int strategy_num; // количество используемых стратегий
int run_num; // количество прогонов
int s_stat[STRATEGY_MAXNUM][PASS_MAXNUM]; // массив структур статистики по стратегиям
} CMS_STAT;
/****************************************************************************
cms_statinit — инициализация массива структур статистики
Входные параметры:
s_num — количество используемых стратегий
r_num — количество прогонов
Возвращаемое значение: указатель на массив статистики выполнения заданий
NULL — в случае ошибки
****************************************************************************/
CMS_STAT *cms_statinit(s_num,r_num)
int s_num,r_num;
{
int i,j;
static CMS_STAT cms_stat;
// проверка входных аргументов
if((s_num > STRATEGY_MAXNUM) || (r_num > PASS_MAXNUM))
{
printf(«%d > %d\n»,s_num, STRATEGY_MAXNUM);
printf(«%d > %d\n»,r_num, PASS_MAXNUM);
printf(«не обнулили»);
return((CMS_STAT *) NULL);
}
cms_stat.strategy_num = s_num;
cms_stat.run_num = r_num;
// обнуление массива структур статистики по стратегиям
for(i = 0; i < s_num;i++)
bzero((void *) cms_stat.s_stat, r_num * sizeof(int));
printf(«обнулили»);
return(&cms_stat);
}
void cms_stat_ob(ps)
CMS_STAT *ps;
{
int i, j;
for(j=0;j
{
for(i=0;i
{
ps->s_stat[j] = 0;
}
}
}
void cms_print(ps)
CMS_STAT *ps;
{
int i,j;
for(i=0;i
{
for(j=0;j
{
printf(«%d », ps -> s_stat[j]);
}
printf(«\n»);
}
}
main()
{
cms_statinit(6,200);
cms_print();
cms_stat_ob();
}
Допустимое количество элементов структуры может быть меньше 100, при обявлении 1200 элментов структуры выдается ошибка о сегментации.
Функция cms_statinit() по идеи должна обнулять элементы структуры, но это не происходит.
Подскажите пожалуйста, в чем ошибка.
Заранее благоарен.
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
В какой момент происходит сегфолт?
Хинт: чтобы твой исходник легче было читать, заключай его в теги code ;)
Обнуляешь ты тоже очень странно. Достаточно сделать
И она будет обнулена. А зачем-то делать цикл…. Странное решение. Тем более что инициализацию элементов структуры всовываешь после ее обнуления memset-ом и все норм.
P.S.:
вместо этого лучше писать
Так принято, так все привыкли, так понятнее.
Обнуление должно происходить в функции cms_statinit(), но оно не происходить. Какие то нелепые числа остаются. А обнуление в цикле сделал, ради теста :)
А сегментация теряется, когда число элементов(которые облуящешь) больше ста. Если количество элементов структуры меньше 100, то программа работает.
Спасибо за помощь. Разобрался.