内存分配问题?

时间:2011-05-13 08:04:10

标签: c memory-management oracleclient

我正在unix服务器中执行Proc代码,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 个答案:

答案 0 :(得分:1)

  1. Don't cast the return value of malloc() in C
  2. 如果sizeof *what_if_var的类型不是malloc(),最好在what_if_var的调用中写what_if
  3. 如果内存分配不足,请始终检查是否没有返回NULL指针。
  4. 调查一个进程可以使用的RAM数量是否有限制,一些系统管理员会在共享计算机上执行此操作。
  5. 使用size_t来保存大小,这是malloc()的参数类型,所以它有意义。

答案 1 :(得分:0)

你应该检查malloc是否返回NULL,这意味着没有可用的内存分配。您应该使用free()函数再次使用不会再使用的数据释放内存。

内存限制取决于操作系统及其配置。 32位进程的内存限制可能是2 GB或4 GB。