проблема в распределении памяти? - PullRequest
0 голосов
/ 13 мая 2011

Я выполняю код Proc на Unix-сервере, proc будет считывать запись из файла и сохранять данные в массиве структуры, и после некоторой обработки он выдаст вывод. Когда я читаю 368700 записей из файла и обрабатываю код, это означает, что он исполняется нормально. но когда я пытаюсь прочитать 370000 записей из файла и обработать средства, я получаю сообщение об ошибке ORA-12533: TNS:illegal ADDRESS parameters and illegal address. Что может быть причиной и возможным решением этой ошибки?

Я сделал распределение памяти, как показано ниже:

 int unsigned long  size=(atoi(argv[2]))+1;
 printf("\nthe size is %lu",size);
 printf("\n am here 1");
 what_if_var =(what_if*)malloc((size)*sizeof(what_if));
 temp_var    =(what_if*)malloc((size)*sizeof(what_if));

Ответы [ 2 ]

1 голос
/ 13 мая 2011
  1. Не приводите возвращаемое значение malloc() в C .
  2. Лучше написать sizeof *what_if_var в вызове malloc(), еслитип what_if_var на самом деле не what_if.
  3. Всегда проверяйте, что вы не получили указатель NULL, в случае нехватки памяти может произойти сбой.
  4. Расследоватьесли существует ограничение на объем оперативной памяти, который может использовать процесс, некоторые системные администраторы делают это на общих компьютерах.
  5. Используйте size_t для хранения размеров, это тип аргумента malloc(), поэтому он делаетчувство.
0 голосов
/ 14 мая 2011

Вы должны проверить, что malloc возвратил NULL, это означает, что нет доступной памяти для распределения.Вы должны освободить память данными, которые вы больше не будете использовать с функцией free ().

Ограничение памяти зависит от операционной системы и ее конфигурации.Ограничение памяти 32-разрядного процесса может составлять 2 ГБ или 4 ГБ.

...