Существует ли какой-то лимит памяти для запуска исполняемого файла (написанного на C) без проблем? - PullRequest
1 голос
/ 13 марта 2009

Я делаю проект с использованием C, а CodeBlocks - моя IDE. Windows Vista - это ОС. Я добавил кое-что новое в уже работающий код, и теперь исполняемый файл вылетает каждый раз. у меня нет ошибок после компиляции. Компьютеры и программирование - это не моя область, но я подозреваю, что это может быть связано с какими-то ограничениями памяти (если они существуют и даже имеют смысл). Я говорю это потому, что работаю с тремя разными 3D матрицами / массивами измерений:

  • 1500х5х2
  • 1500х5х12
  • 1500x5x200

Затем у меня было еще два одномерных массива размером 1500. все это работало нормально.

он начал падать, когда я добавил еще три 2D матрицы / массива размером 1500x5. если я прокомментирую некоторые из существующих матриц, новые будут работать нормально, но только по одной за раз.

(кстати, все вышеперечисленные матрицы относятся к типу INT и были определены с помощью указателей и вызовов)

Есть предложения?

Ответы [ 5 ]

6 голосов
/ 13 марта 2009

Существуют ограничения для платформ и т. Д., Но ваши 3-мерные матрицы используют только несколько МБ ОЗУ (чуть более 6), поэтому я сомневаюсь, что вы выходите за эти ограничения.

Если при добавлении других матриц произошел сбой, было бы более подозрительно, что у вас возникли ошибки выделения памяти / доступа к указателям, определяющим новый код матрицы, который вы добавили.

Как вы определяете свои матрицы?

---- РЕДАКТИРОВАТЬ ----

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

1 голос
/ 13 марта 2009

Я не знал, что массивы могут иметь отрицательные размеры.

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

0 голосов
/ 26 августа 2009

Можете ли вы указать, что это за сбой?

Какое сообщение вы получаете?

Я цитирую ответ выше:

«Я бы посоветовал вам узнать, как использовать отладчик вашей IDE. У нас действительно пока ничего не получается».

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

Теперь я видел в вашем комментарии, что вы решили свою проблему, но в общем случае правильная отладка - это единственный способ программирования, и при публикации проблемы укажите как можно больше кода и подробностей!

0 голосов
/ 13 марта 2009

Существует ли какой-то лимит памяти для запуска исполняемого файла (написанного на C) без проблем?

В 32-битной ОС ваша программа ограничена 4 ГБ памяти (на самом деле меньше, но это жесткий верхний предел), поскольку размер указателя составляет 32 бита, и вы можете ссылаться только на 4 ГБ с 32-битным указателем. *

Это не должно быть проблемой, поскольку ваш самый большой массив потребляет менее 6 МБ - даже если вы создаете несколько сотен этих массивов, все в порядке.

Вы в значительной степени следуете стандартному способу для создания динамических многомерных массивов в C :

int *** layer=calloc(lines, sizeof(int **));
for(i=0;i<lines;i++)
{ 
   layer[i]=calloc(columns, sizeof(int*));
   for(j=0;j<columns;j++) 
   { 
     layer[i][j]=calloc(hight, sizeof(int));
   }
}

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

-Adam

0 голосов
/ 13 марта 2009

Я бы посоветовал вам узнать, как использовать отладчик вашей IDE. Нам действительно пока нечего делать.

...