-2
我有以下的C程序,其MALLOC兩名漁政陣列,並且所述自由部分期間它報告Ç免費()在Linux報告無效下一尺寸誤差,陣列指針,相同的代碼通上MAC
*的glibc檢測到* ./a.out:free():無效的下一個尺寸(快速):0x0000000000e05070 ***
帶回溯。
我試着在linux服務器上的相同的代碼,並得到相同的錯誤。但是,相同的代碼在我的朋友的Mac上完美工作。
我想知道這是否是操作系統特定的問題(例如編譯器的差異)? 或者我以不適當的方式做了一些事情,但被mac OS忽略了?
# include <stdlib.h>
# define N 10
int main(){
int size = N+1;
//memory allocation
float **m = malloc((size)*sizeof(float*));
int i;
for (i=0; i<size; i++)
m[i] = malloc((size)*sizeof(float));
// ... do some work
//free
for (i=0; i<size; i++){
printf("free: %d", i);
free(m[i]);
printf(" freed.\n");
}
free(m);
printf("m freed.\n");
return 0;
}
PS:遊離for循環中,如果使用
for (i=size; i>=0; i--){...}
而不是增量版本時,它實際上將釋放米[I]下降到2之前相同的錯誤彈出。 Mac沒有出錯。
將'int size'更改爲'const int size'? – 2014-10-05 22:54:27
你在做什麼'做一些工作'部分?你可能會以某種方式溢出數組,從而破壞導致錯誤的緩衝區。例如,請參閱http://stackoverflow.com/questions/23680334/what-is-a-glibc-free-malloc-realloc-invalid-next-size-invalid-pointer-error-and?rq=1 – uesp 2014-10-06 00:23:24
是的,你遺漏了可能導致問題的代碼的每一部分,給出了什麼? – 2014-10-06 00:31:35