int main()
{
char *p;
p = malloc(10);
delete(p);
return;
}
Какова будет ошибка, обнаруженная Valgrind?Инструмент Valgrind для GDB
int main()
{
char *p;
p = malloc(10);
delete(p);
return;
}
Какова будет ошибка, обнаруженная Valgrind?Инструмент Valgrind для GDB
Прежде всего, это фрагмент кода дает две ошибки компиляции,
В функции 'Int основной()': ошибки: неправильное преобразование из 'недействительным *' до 'символ *' [-fpermissive] p = malloc (10);
^ ошибка: return-statement без значения, в функции, возвращающей 'int' [- fpermissive] return;
Исправьте код с этими изменениями,
Тип произнесением при выделении памяти с использованием таНоса, как показано здесь. p = (char *) malloc (10);
Возвращаемый тип основной функции - int, поэтому соответственно измените возвращаемое значение, как указано здесь. return 0; // Используйте return 0, а не просто возвращаем.
Прежде чем использовать операцию удаления, выполните проверку правильности указателя, как показано здесь. if (p) delete (p);
С вышеуказанными изменениями и после успешной компиляции вышеуказанного кода. Используйте инструмент valgrind для запуска вышеуказанного образца. Таким образом, в коде нет проблемы, поэтому valgrind не обнаружил никаких проблем. Ниже приведен пример вывода valgrind.
Valgrind выход:
==30050== Memcheck, a memory error detector
==30050== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==30050== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info
==30050== Command: ./valgrindtest
==30050==
main Start
==30050== Mismatched free()/delete/delete []
==30050== at 0x4C2C18D: operator delete(void*) (vg_replace_malloc.c:576)
==30050== by 0x4006E0: main (valgrindtest.cpp:16)
==30050== Address 0x5a1b040 is 0 bytes inside a block of size 10 alloc'd
==30050== at 0x4C2ABE3: malloc (vg_replace_malloc.c:299)
==30050== by 0x4006C2: main (valgrindtest.cpp:11)
==30050==
main End
==30050==
==30050== HEAP SUMMARY:
==30050== in use at exit: 0 bytes in 0 blocks
==30050== total heap usage: 1 allocs, 1 frees, 10 bytes allocated
==30050==
==30050== All heap blocks were freed -- no leaks are possible
==30050==
==30050== For counts of detected and suppressed errors, rerun with: -v
==30050== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Попробуйте и убедитесь сами? –