gdb-segmentation错误错误(背包程序)

时间:2014-07-23 16:45:51

标签: c gdb dynamic-programming knapsack-problem

我已经开发了两个版本来解决背包问题。 一个为N * C矩阵分配存储器,而另一个为(N + 1)*(C + 1)矩阵分配存储器。 最大内存带宽为8 GB。 我的两个程序都成功运行某些输入文件,并且不超过内存带宽。

对于其中一个超过8 GB内存带宽的输入文件,它会显示分段错误。但是在使用gdb调试程序时,它显示:对于两个版本:

  

从knapSeq1读取符号...(没有调试符号   实测值)...完成的。

但是当我尝试使用

运行程序时
  

gdb运行knapSeq1

它显示以下错误:

版本1:

  

对象数量为235638231400,容量为1. [ERROR]   :无法为权重/利润分配内存。 [劣势1(过程   19432)退出代码01]

随着输入文件中对象数量的增加,进程xxxx发生变化。

版本2:它显示如下: - (对于一个程序超出内存带宽的输入文件)并显示分段错误

  

对象数为-584969880,容量为1。   程序接收信号SIGSEGV,分段故障。   来自/lib64/libc.so.6的memset()中的0x00000036dd8894de

对于成功运行的其他文件,gdb的输出与上面相同。

我的问题是:

(1)如果版本1,程序运行成功(给出正确的输出),为什么gdb显示这样的错误?
对于版本2,即使程序成功运行(给出正确的输出)并且没有显示分段错误,为什么gdb显示这样的错误?

(2)我们如何纠正程序,以免它出现分段错误?

在这两个程序中,我正在分配内存:

table = (int*) malloc ((N+1)*(C+1)*sizeof(int*));
table= (int*)malloc((N)*(C)*sizeof(int*));

0 个答案:

没有答案