После выполнения этой функции многие (не уверены точно сколько) раз, это seg ошибки в простом распределении памяти. Почему это внезапно произойдет? В GDB я заметил что-то странное. В функции, которая его вызывает, обычно имеется 6-значное длинное шестнадцатеричное значение для wrd (например, wrd = 0x605140), однако при вызове, где он сбой, шестнадцатеричное значение составляет всего две цифры. (WRD = 0x21). Я также проверил wrd-> длину, и это 3.Ошибка сегментации на malloc
линия, что она падает на это ...
char *word_temp = malloc(wrd->length * sizeof(char));
EDIT:
Вот код, который создает WRD ...
while(fgets(input, 100, src) != 0)
{
int i = 0;
while(input[i] != '\0')
{
i++;
}
struct word *wrd = malloc(sizeof(struct word));
wrd->letters = input;
wrd->length = i;
Если у меня переполнение, как я могу это исправить?
Скорее всего, 'wrd' не указывает на что-то действительное. – chris
Если у вас есть этот параметр, вы должны запустить приложение под Valgrind. Очень вероятно, что вы повредили кучу, переполнив динамически выделенный буфер где-нибудь. –
Обычно такие проблемы связаны с ошибками указателя (переполнение буфера и т. Д.), Возможно, в другом месте программы. Здесь может случиться так, что вы не учитываете нулевой ограничитель строк? Трудно сказать с таким маленьким контекстом. – metal