Ошибка выделения памяти с помощью указателей

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

Поэтому мне интересно, возможно ли расширить зарезервированную память для выделения новых экземпляров классов или нет?

Код слишком длинный, чтобы его можно было вставить здесь.
Спасибо за любую помощь!

0

Решение

Во-первых, динамическая память, в которой new Работы обычно занимают всю оставшуюся доступную память в вашем процессе. Там нет никакого способа продлить его дальше. Сколько динамической памяти у вас изначально было, зависит от того, сколько у вашей программы не динамических данных. Невозможно сказать, не зная больше о вашей программе. Сокращая размер нединамических данных, вы можете эффективно «расширять» то, что будет доступно как динамическая память.

Во-вторых, на платформах с виртуальной памятью невозможно «исчерпать память» (если у вас есть исправный файл подкачки). Но вы можете исчерпать адресное пространство процесса. Опять же, если вы исчерпали адресное пространство после выделения только 10509 объекты, что-то еще должно быть не так.

В-третьих, 10509 выглядит очень низким числом. Таким образом, если вам не хватает памяти после выделения стольких объектов, это, вероятно, означает, что сами объекты достаточно велики. Насколько велики ваши объекты?

В-четвертых, ошибки динамического выделения памяти могут быть вызваны повреждением кучи, а это означает, что выделение не удастся, даже если технически остается много свободной памяти. Невозможно сказать, не зная больше о вашем коде.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]