df.reset_index (inplace = True) .. Я использовал это перед циклом for, как-то это сработало
Относительно нового в C++/GCC/Linux (32 бита)...
Это было некоторое время, и это является зависящим от реализации, но я полагаю, что новое желание, негласно, вызывает malloc (). Malloc (), если Вы не просите что-то превышающее адресное пространство процесса, или за пределами указанного (ulimit/getrusage) пределы, не перестанет работать. Даже когда Ваша система не имеет достаточного количества RAM+SWAP. Например: malloc (1 ГБ) в системе с 256Meg RAM + 0 ПОДКАЧЕК, я верю, успешно выполнятся.
Однако, когда Вы идете использование, что память, ядро предоставляет страницы через механизм ленивого выделения. В той точке, когда Вы первое чтение или запись к той памяти, если ядро не может выделить страницы памяти Вашему процессу, она уничтожает Ваш процесс.
Это может быть проблемой на общем компьютере, когда у Вашего коллеги есть медленная базовая утечка. Особенно, когда он начинает выводить системные процессы из строя.
Так то, что Вы видите станд.:: исключения bad_alloc "интересны".
Теперь новый выполнит конструктора на выделенной памяти, касаясь всех тех страниц памяти, прежде чем она возвратится. В зависимости от реализации это могло бы захватывать сигнал из памяти.
Вы попробовали это плоскостью o'l malloc?
Вы попытались запустить "бесплатную" программу? У Вас есть достаточно памяти доступным?
Как другие предположили, Вы проверили limit/ulimit/getrusage () для трудных и мягких ограничений?
На что Ваш код похож, точно? Я предполагаю новый ClassFoo [N]. Или возможно новый символ [N].
Что такое sizeof (ClassFoo)? Что такое N?
Выделение 64*288000 (17.58Meg) должно быть тривиальным для большинства современных машин... Вы работаете на встроенной системе или чем-то в других отношениях специальном?
С другой стороны, Вы связываетесь с пользовательским новым средством выделения? Ваш класс имеет свое собственное новое средство выделения?
Ваша структура данных (класс) выделяет другие объекты как часть его конструктора?
Кто-то вмешался в Ваши библиотеки? У Вас есть несколько компиляторов установленными? Вы используете несправедливость, включают или пути к библиотеке?
Вы связываетесь против устаревших объектных файлов? Необходимо ли просто перекомпилировать Ваши все исходные файлы?
Можно ли создать тривиальную тестовую программу? Просто пара строк кода, который воспроизводит ошибку? Или Ваша проблема в другом месте, и только обнаруживающийся здесь?
--
Если это имеет значение я выделил блоки данных на более чем 2 ГБ с новым в Linux на 32 бита под g ++. Ваша проблема заключается в другом месте.
Возможно, что Вы ограничиваетесь ulimit процесса; выполненный ulimit -a
и проверьте virutal память и данные seg пределы размера. Кроме этого, можно ли отправить код выделения, таким образом, мы видим то, что на самом деле продолжается?
Обновление:
Я с тех пор исправил ошибку индексации массива, и она выделяет правильно теперь.
Если я должен был предположить... Я шел на всем протяжении своей "кучи" и смешивал со структурами данных malloc. (??)
я предложил бы выделить всю Вашу память при запуске программы и использовать размещение, новое для расположения буферов. почему этот подход? хорошо, можно вручную отслеживать фрагментацию и такой. нет никакого портативного способа определить, сколько памяти может быть выделенной для Вашего процесса. я положителен, что существует Linux определенный системный вызов, который получит Вас, что информация (не может думать о том, что это).удачи.
То, что Вы получаете другое поведение, когда Вы запускаете программу в разное время, заставляет меня думать, что код выделения не является настоящей проблемой. Вместо этого кто-то еще использует память, и Вы - канарейка, узнавая, что она отсутствует.
Если это, "кто-то еще" находится в Вашей программе, необходимо смочь найти его при помощи Valgrind.
Если это, кто-то еще - другая программа, необходимо смочь решить, что путем движения в другой runlevel (хотя Вы будете не обязательно знать преступника).