对于我的C程序,我尝试为一个双数组(Ssi)分配内存,然后我在另一个函数(spslicer)中访问它。如果在调用不相关的不同函数(kpmdos)之前分配这个内存,则会得到错误:
*** glibc detected *** ./SpecSli.ex: double free or corruption (!prev): 0x0000000000a86e40 ***
如果我在得到错误后分配它:
malloc.c:3830: _int_malloc: Assertion `(unsigned long)(size) >= (unsigned long)(nb)' failed.
基于此,我认为当我分配内存时,我在kpmdos中做了一些错误,但是我看不到任何错误:
void kpmdos(csptr A, int Mdeg, double nvec, double ctr, double wid, int n, double *mu){
// initialize variables
double *w = malloc(n*sizeof(double));
//free(w);
fill_rand(n, w);
double *v = malloc(n*sizeof(double));
divide_array(w, norm(w, n), v, n);
double *vkm1 = malloc(n*sizeof(double));
fill(n, 0, vkm1);
double *vk = malloc(n*sizeof(double));
memcpy(vk,v, n*sizeof(double));
double *temp = malloc(n*sizeof(double));
double *vkp1 = malloc(n*sizeof(double));
double thet = pi/(Mdeg+1);
double a1 = 1/(Mdeg+2.0);
double a2 = sin(thet);
double jac;
double scal;然后,我在没有内存分配的情况下进行其他编码。
free(w);
free(vkp1);
free(vkm1);
free(temp);
free(vk);
free(v);
}当在函数之前分配的输出是:
> > ==7045== HEAP SUMMARY:
> ==7045== in use at exit: 46,452 bytes in 235 blocks
> ==7045== total heap usage: 351 allocs, 116 frees, 66,700 bytes allocated
> ==7045==
> ==7045== LEAK SUMMARY:
> ==7045== definitely lost: 22,331 bytes in 146 blocks
> ==7045== indirectly lost: 0 bytes in 0 blocks
> ==7045== possibly lost: 0 bytes in 0 blocks
> ==7045== still reachable: 24,121 bytes in 89 blocks
> ==7045== suppressed: 0 bytes in 0 blocks
> ==7045== Rerun with --leak-check=full to see details of leaked memory
> ==7045==
> ==7045== For counts of detected and suppressed errors, rerun with: -v
> ==7045== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)如果你知道这个问题,或者需要更多的信息,请告诉我。
发布于 2015-08-03 21:59:30
谢谢你们的帮助。我终于弄明白了其中的大部分。在我没有发布的编码过程中,我有一个函数,它会将数组中的所有变量更改为不同的变量,对于这个函数,我输入了错误的数组大小。
https://stackoverflow.com/questions/31681239
复制相似问题