执行C语言的程序,终端显示:已完成(已终止)

执行C语言的程序,终端显示:已完成(已终止),c,linux,terminal,C,Linux,Terminal,我在Linux的终端上用C语言运行一个程序,我得到消息“Finished(killed)”。从获得的输出中,我看到执行或多或少总是在同一点终止。我也在处理大量的数据,我在计算机上本地执行程序 在控制台ulimit-a中编写时,我得到以下信息: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 fil

我在Linux的终端上用C语言运行一个程序,我得到消息“Finished(killed)”。从获得的输出中,我看到执行或多或少总是在同一点终止。我也在处理大量的数据,我在计算机上本地执行程序

在控制台ulimit-a中编写时,我得到以下信息:

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 29117
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 29117
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
但我看到里面有正常值

我不知道如何才能完成整个执行。我已经优化了代码并释放了内存,但我遇到了同样的问题“(被杀死)”

#包括
#包括
#包括
#包括
#定义T 100
#定义dt 1.e-4
#定义itmax(T/dt)
#定义一个0.27
#定义K1 0.15
#定义K2 1.e2
#定义第1.e3页
#定义s2
#定义两个PI(6.283185307179586476925286766559005768394387987502)
#定义IM1 2147483563
#定义IM2 2147483399
#定义AM(1.0/IM1)
#定义IMM1(IM1-1)
#定义IA1 40014
#定义IA2 40692
#定义IQ1 53668
#定义IQ2 52774
#定义IR11211
#定义IR23791
#定义NTAB 32
#定义NDIV(1+IMM1/NTAB)
#定义EPS 1.2e-7
#定义RNMX(1.0-EPS)
双ran2(双*idum){
int j;
长k;
静态长idum2=123456789;
静态长iy=0;
静态长iv[NTAB];
浮子温度;
如果(*idum=0;j--){
k=(*idum)/IQ1;
*idum=IA1*(*idum-k*IQ1)-k*IR1;
如果(*idum<0)*idum+=IM1;
如果(jRNMX)返回RNMX;
否则返回温度;
}
双种子{
返回sqrt(-2.0*log(ran2(&seed))*cos(TWOPI*ran2(&seed));
}
双rnd(){
返回(双精度)rand()/(双精度)rand_MAX;
}
int main(){
int j,行,d;
d=0;
双*t;
t=(双*)malloc((itmax)*sizeof(双));
双**x,**y;
x=(双**)malloc(2*sizeof(双*);
y=(双**)malloc(2*sizeof(双*);

对于(rows=0;rows使用
-g
编译并链接调试信息,然后在调试器(如
gdb
)的控制下运行程序,并观察其停止的位置。您应该了解是哪行源代码导致了导致程序被系统终止的问题

$ gcc -O2 -g -o my_program my_program.c
$ gdb my_program
gdb> run
如果程序需要命令行参数,请在
run
命令中键入它们

gdb> run arg1 arg2

使用
-g
编译并链接调试信息,然后在调试器(如
gdb
)的控制下运行程序,并观察其停止位置。您应该了解是哪一行源代码导致问题,从而导致程序被系统终止

$ gcc -O2 -g -o my_program my_program.c
$ gdb my_program
gdb> run
如果程序需要命令行参数,请在
run
命令中键入它们

gdb> run arg1 arg2

几乎可以肯定的是,您缺少交换分区,或者您有其他一些实用程序监控可用的可用内存量,因此您的程序被终止,因为它消耗了太多的内存,直到没有剩余的可用ram为止

您可以使用htopconky来清楚地了解问题


如果您有一个交换分区,那么您的系统将尝试将内存从磁盘交换到磁盘,这很可能会冻结它。这是一个更糟糕的情况,因为在大多数情况下,您可以采取的唯一措施是重新启动系统:以我的经验,当系统冻结时,它将不再响应任何键盘输入


在我的系统上,您的可执行文件需要2M26秒才能填满可用8GB内存的50%以上,不包括其他正在运行的程序占用的额外32%



您可能需要使用内存泄漏分析工具(例如valgrind)检查潜在的泄漏,或者只是手动检查源代码。如果您无法减少其内存占用,那么您唯一的选择就是寻找具有更大RAM池的功能更强大的计算机。

您几乎肯定缺少交换分区,或者您有其他一些实用程序监控可用的可用内存量,因此否则程序将被终止,因为它消耗了太多内存
,直到没有可用的ram

您可以使用htopconky来清楚地了解问题


如果您有一个交换分区,那么您的系统将尝试将内存从磁盘交换到磁盘,这很可能会冻结它。这是一个更糟糕的情况,因为在大多数情况下,您可以采取的唯一措施是重新启动系统:以我的经验,当系统冻结时,它将不再响应任何键盘输入


在我的系统上,您的可执行文件需要2M26秒才能填满可用8GB内存的50%以上,不包括其他正在运行的程序占用的额外32%


您可能希望使用内存泄漏分析工具(例如valgrind)来检查潜在的泄漏,或者只是手动检查源代码。如果您无法减少其内存占用,那么您唯一的选择就是寻找具有更大RAM池的功能更强大的机器

“寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题说明的问题对其他读者没有用。请参阅:。”“寻求调试帮助的问题。”(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:““我写了你想要的。”