Я пишу небольшое консольное приложение для командной строки Windows.бесплатный сбой с сигналом SIGTRAP
Im выделение памяти для двух массивов, chi
и chi_comp
так:
/* allocating memory for chi */
if ((chi = (int *)malloc(cm * sizeof(int))) == NULL)
{
printf("Error allocating %i bytes of memory.\n", lm * sizeof(int));
return CMD_NONE;
}
/* allocating memory for chi_comp */
if ((chi_comp = (int *)malloc(cm * sizeof(int))) == NULL)
{
printf("Error allocating %i bytes of memory.\n", cm * sizeof(int));
return CMD_NONE;
}
Чуть позже в коде я инициализировать их
for (i = 0; i < cm; i++)
{
chi[i] = -1;
chi_comp[i] = -1;
}
и использовать их как
chi[grade] = i;
chi_comp[i] = grade;
и
if (chi_comp[i] != -1)
{
printf(" %i ", v[chi_comp[i]][0]);
}
Работа с ними работает нормально, но когда я пытаюсь освободить память, когда мне это не нужно, программа больше не сработает.
free(chi);
free(chi_comp);
Отладка с результатами GdB следующее:
предупреждения: КУЧА [m.exe]: предупреждение: Heap блок на 003518B8 модифицированном в 003518CC мимо запрашиваемым размером с
Программа получила сигнал SIGTRAP, ловушка Trace/breakpoint. 0x776f0b2d в NTDLL RtlpNtEnumerateSubKey() из C: \ Windows \ system32 \ ntdll.dll
чи в этом случае значения 003518C0
и chi_comp значения 003518E8
Я думаю, что вы собираетесь за пределы где-то в коде, так что проверить счетчики! – gsamaras
'chi [grade] = i;' вы проверили 'grade is
@SouravGhosh да –