这个问题已被问过好几次,但既然我认为我的情况是我认为更具体:
我有一个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
Run Code Online (Sandbox Code Playgroud)
[...]
当我在Solaris上运行它时,它会抱怨:
malloc failed
Run Code Online (Sandbox Code Playgroud)
在我分配三维数组的一行:
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??
}
}
Run Code Online (Sandbox Code Playgroud)
在那里my_length和my_length2得到真的很巨大的!
我变得绝望了!有人知道我的问题是什么吗?
这个问题有很多重复,令人讨厌,我找不到适合你的问题.
基本问题是你的程序绝对是在malloc/free库使用的内存块跟踪信息上编写的.
程序中的某个地方是一个超出范围的内存写入.
| 归档时间: |
|
| 查看次数: |
18643 次 |
| 最近记录: |