У меня возникла проблема, когда я получаю двойную свободную ошибку или ошибку с коррупцией, когда пытаюсь освободить память, вне функции, в которой я выделил этот блок памяти, хотя я передал указатель на блок памяти указателю вне этой функции.Освобождение памяти за пределами функции вызывает двойную ошибку или ошибку повреждения
Мой код таким образом, что в функции main()
, я делаю вызов функции с определением char * reverseComplement(char * pattern);
как таковой:
char * rev = reverseComplement(dna_input);
где dna_input
является char
указатель на блок выделенной памяти, который был выделен в пределах main()
. В функции reverseComplement()
есть строка, в которой я выделяю память, а затем возвращаю указатель на этот блок памяти в самом конце.
...
...
char * revcomplpattern = (char *)malloc(strlen(pattern));
...
...
return revcomplpattern;
Одна из причин, я думал, что может быть причиной проблемы является то, что после того, как функция reverseComplement()
завершения выполнения, его стек получает снесено, так что я потерял бы доступ к памяти в куче. Но это не должно быть из-за того, что я прошел над рукояткой памяти, выделенной кучей, от revcomplpattern
, которая находилась в reverseComplement()
до rev
, которая находится в main()
. Поэтому free(rev)
в main()
должен выполнить эту работу.
Я не знаю, что я могу делать неправильно здесь, и любая помощь очень ценится!
'malloc (strlen (pattern))' -> 'malloc (strlen (pattern) +1)' – BLUEPIXY
Это не лучшая привычка выделять память в функции, и они заставляют ее отвечать на вызов 'free() '. – babon
Прежде всего, удалите бросок, а затем посмотрите, что говорит вам компилятор. – alk