Я искал известную ошибку «std :: bad_alloc», но не смог найти ни одного случая, подобного моему.
Я реализовал код на C ++ (если быть точным: работает в MinGW с Eclipse в Win 7 Prof.), и код отлично работает для небольшого числа экземпляров классов, но когда число экземпляров классов достигает более 10509, возникает ошибка появляется окно, а затем затмение показывает ошибку ‘std :: bad_alloc’.
Я использую «new» для создания экземпляров нового класса, и каждому классу нужны два указателя и три переменные типа «long int», «string» и «int».
Я не могу деконструировать сборку каких-либо экземпляров раньше, потому что позже они нужны мне как узлы для оценки в какой-то другой части программы. Но я все равно добавил деконструктор классов в определения классов, и они точно установлены правильно.
Я уверен в том, когда и с помощью какой команды программа останавливается, что происходит именно после создания 10509 экземпляров класса прямо при попытке добавить 10510-й экземпляр класса.
Поэтому мне интересно, возможно ли расширить зарезервированную память для выделения новых экземпляров классов или нет?
Код слишком длинный, чтобы его можно было вставить здесь.
Спасибо за любую помощь!
Во-первых, динамическая память, в которой new
Работы обычно занимают всю оставшуюся доступную память в вашем процессе. Там нет никакого способа продлить его дальше. Сколько динамической памяти у вас изначально было, зависит от того, сколько у вашей программы не динамических данных. Невозможно сказать, не зная больше о вашей программе. Сокращая размер нединамических данных, вы можете эффективно «расширять» то, что будет доступно как динамическая память.
Во-вторых, на платформах с виртуальной памятью невозможно «исчерпать память» (если у вас есть исправный файл подкачки). Но вы можете исчерпать адресное пространство процесса. Опять же, если вы исчерпали адресное пространство после выделения только 10509
объекты, что-то еще должно быть не так.
В-третьих, 10509
выглядит очень низким числом. Таким образом, если вам не хватает памяти после выделения стольких объектов, это, вероятно, означает, что сами объекты достаточно велики. Насколько велики ваши объекты?
В-четвертых, ошибки динамического выделения памяти могут быть вызваны повреждением кучи, а это означает, что выделение не удастся, даже если технически остается много свободной памяти. Невозможно сказать, не зная больше о вашем коде.
Других решений пока нет …