首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个不同的内存错误取决于我分配内存的位置

两个不同的内存错误取决于我分配内存的位置
EN

Stack Overflow用户
提问于 2015-07-28 15:46:41
回答 1查看 841关注 0票数 0

对于我的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中做了一些错误,但是我看不到任何错误:

代码语言:javascript
复制
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;

然后,我在没有内存分配的情况下进行其他编码。

代码语言:javascript
复制
  free(w);
  free(vkp1);
  free(vkm1);
  free(temp);
  free(vk);
  free(v);
}

当在函数之前分配的输出是:

代码语言:javascript
复制
> > ==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)

如果你知道这个问题,或者需要更多的信息,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-03 21:59:30

谢谢你们的帮助。我终于弄明白了其中的大部分。在我没有发布的编码过程中,我有一个函数,它会将数组中的所有变量更改为不同的变量,对于这个函数,我输入了错误的数组大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31681239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档