Я работаю с программой на C++, которая использует несколько буферов, и я получаю ошибку seg за несколько минут до запуска программы. Я не знаю, как правильно это сделать. Код, который я думаю, что дает мне ошибку в настоящее время, как, например:Malloc и бесплатные многократные указатели
int *myBuf1, *myBuf2;
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = myBuf1;
// do work
if(myBuf1) {
free(myBuf1);
}
myBuf1 = NULL;
myBuf2 = NULL;
Мой первый вопрос: с заданием «myBuf2 = myBuf1», делает myBuf2 выделить другой блок памяти с SizeOf (INT) * maxPacketSize, или это просто указатель на тот же блок памяти, выделенный myBuf1?
Во-вторых, должен ли я освобождать myBuf2, а также myBuf1, а затем установить оба значения в NULL? Выше я только освобождаю myBuf1. ИЛИ, это лучше всего сделать:
myBuf1 = (int*)malloc(sizeof(int) * maxPacketSize);
myBuf2 = (int*)malloc(sizeof(int) * maxPacketSize);
затем бесплатно оба?
Это выглядит больше C, чем C++ – Pubby
Почему вы используете 'malloc' и' free' в C++? Почему вы не знаете, откуда происходит segfault? Запустите приложение с помощью gdb. Используйте 'bt', чтобы найти функцию, которая вызывает сбой. Смотрите переменные. Проверка перед 'free' бесполезна. В противном случае проблема должна быть в 'do work'. Код, который вы показываете, не будет sefault. – pmr
Включите предупреждения в своем компиляторе. Все становится намного легче, когда компилятор говорит вам, что не так, прежде чем вы даже знаете, что что-то не так. –