2017-01-31 3 views

ответ

1
  1. Прежде всего, это фрагмент кода дает две ошибки компиляции,

    В функции 'Int основной()': ошибки: неправильное преобразование из 'недействительным *' до 'символ *' [-fpermissive] p = malloc (10);
    ^ ошибка: return-statement без значения, в функции, возвращающей 'int' [- fpermissive] return;

  2. Исправьте код с этими изменениями,

    • Тип произнесением при выделении памяти с использованием таНоса, как показано здесь. p = (char *) malloc (10);

    • Возвращаемый тип основной функции - int, поэтому соответственно измените возвращаемое значение, как указано здесь. return 0; // Используйте return 0, а не просто возвращаем.

    • Прежде чем использовать операцию удаления, выполните проверку правильности указателя, как показано здесь. if (p) delete (p);

  3. С вышеуказанными изменениями и после успешной компиляции вышеуказанного кода. Используйте инструмент 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)