gpt4 book ai didi

c - 两种不同的内存错误取决于我分配内存的位置

转载 作者:行者123 更新时间:2023-11-30 17:12:14 25 4
gpt4 key购买 nike

对于我的 C 程序,我尝试为双数组(ssi)分配内存,然后在另一个函数(spslicer)中访问它。如果我在调用另一个应该不相关的函数(kpmdos)之前分配此内存,我会收到错误:

*** glibc 检测到 *** ./SpecSli.ex:双重释放或损坏 (!prev):0x0000000000a86e40 ***

如果我在收到错误后分配它:

malloc.c:3830: _int_malloc: 断言“(unsigned long)(size) >= (unsigned long)(nb)”失败。

基于此,我认为分配内存时我在 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);
}

当 valgrind 在函数之前分配时,使用它的输出是:

> > ==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)

如果您知道问题所在或需要更多信息,请告诉我。

最佳答案

谢谢大家的帮助。我终于明白了大部分内容。在我没有发布的编码过程中,我有一个函数可以将数组中的所有变量更改为不同的值,并且对于这个函数,我输入了错误的数组大小。

关于c - 两种不同的内存错误取决于我分配内存的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31681239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com