У меня странный вопрос, который я не ожидал. У меня есть класс с именем ответы и в заголовке заключается в следующем:
class Answer
{
char* aText;
bool b_correct;
public:
Answer():aText(0){;} //default constructor
}
Основной (тестирование) код драйвера заключается в следующем:
int main(void)
{
static const unsigned int MAX_ANSWERS = 5;
Answer answers[MAX_ANSWERS];
}
The (неожиданный) странность Я получаю то, что есть распределение происходит, и я еще не использовал нигде в моем коде. Я предполагаю, что char * вызывает это в списке инициализации.
Я использую valgrind для проверки своего кода, и я получаю 11 распределений и 10 бесплатных. Когда я удаляю инициализатор :aText(0)
, дополнительное выделение уходит.
Получаю, что это плохо сконструированный код. Я следую схеме курса, чтобы узнать, как писать на C++. Может ли кто-нибудь помочь мне понять, как распределена память или что происходит во время списка инициализации, чтобы вызвать вызов нового?
Я знаю, что ошибка исходит из показанного кода. Я знаю, что дополнительный alloc происходит. Когда я компилирую и запускаю только этот код.
Valgrind Выход:
==12598== Memcheck, a memory error detector
==12598== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==12598== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==12598== Command: ./Answers
==12598==
==12598==
==12598== HEAP SUMMARY:
==12598== in use at exit: 72,704 bytes in 1 blocks
==12598== total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==12598==
==12598== LEAK SUMMARY:
==12598== definitely lost: 0 bytes in 0 blocks
==12598== indirectly lost: 0 bytes in 0 blocks
==12598== possibly lost: 0 bytes in 0 blocks
==12598== still reachable: 72,704 bytes in 1 blocks
==12598== suppressed: 0 bytes in 0 blocks
==12598== Rerun with --leak-check=full to see details of leaked memory
==12598==
==12598== For counts of detected and suppressed errors, rerun with: -v
==12598== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Информация о платформе:
Fedora 22
gcc.x86_64 5.1.1-4.fc22
valgrind.x86_64 1: 3.10.1-13.fc22
codeblocks.x86_64 13.12-14.fc22
Избавиться от '...' и опубликовать полный класс, который показывает, что вы наблюдаете. Вы потенциально скрываете код за этими '...', который вызывает распределение. – PaulMcKenzie
Почему вы говорите, что есть распределения? Из-за valgrind? Кроме того, хорошо написанный код C++ не будет содержать никаких явных вызовов 'new', но будет иметь много автоматических распределений за кулисами. Не делайте ошибку, думая, что писать C++ о вызове 'new' и' delete'. –
Я не хотел публиковать код, который не был важен для проблемы. Я создал перерывы в моем коде, и это все, что работает для меня, чтобы получить выделение ... и да, valgrind сказал, что это произошло. Это проблема с valgrind? – user2470057