这个问题已经被问了好几次,但因为我觉得我的情况是我想更具体:
我有一个C程序,它完美的作品我的OSX系统(过于庞大复制)上。 我已经用Valgrind的测试吧,我不会错过任何的FreeS / mallocs /或写,所有的问题都解决了100%。
当我现在在外部服务器通过ssh运行程序,当我没有那么多的数据运行(见下面的代码,my_length <1000),它的工作没有任何问题。 但是,具有较大的数据集,使用Linux终端我得到这个错误:
*** Error in `./a.out': free(): invalid next size (fast): 0x00000000016b9ed0 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3e50475cff]
/lib64/libc.so.6[0x3e5047cff8]
./a.out[0x41083c]
./a.out[0x402374]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x3e50421d65]
./a.out[0x400e79]
======= Memory map: ========
00400000-00418000 r-xp 00000000 00:4d 89038
[...]
当我在Solaris上运行它,它抱怨:
malloc failed
在一行其中I分配一个三维阵列:
int ***A, ***B, ***C;
A = malloc(sizeof(int**)*2); B = malloc(sizeof(int**)*2); C = malloc(sizeof(int**)*2);
int i;
for (i = 0; i < 2; i++) {
A[i] = malloc(sizeof(int*)* my_length);
B[i] = malloc(sizeof(int*)* my_length);
C[i] = malloc(sizeof(int*)* my_length);
for (j = 0; j <= my_length2; j++) {
A[i][j] = malloc(sizeof(int)* my_length2);
B[i][j] = malloc(sizeof(int)* my_length2);
C[i][j] = malloc(sizeof(int)* my_length2);<== malloc failed here??
}
}
其中my_length
和my_length2
得到真的很巨大的!
我越来越绝望! 是否有人有任何线索,我的问题可能是什么?