gpt4 book ai didi

C Malloc 断言

转载 作者:太空宇宙 更新时间:2023-11-04 04:26:47 28 4
gpt4 key购买 nike

我在这段代码中执行 malloc 时遇到问题,

  /*function starts*/

if(NULL==(partial_results=(bignum_t**)malloc(sizeof(bignum_t*)*long_op2))){
return NULL;
}

/*to initialize all the members of the array*/
for(i=0;i<long_op2;i++){
(*(partial_results+i))=NULL;
}


for(i=long_op2-1;i>=0;i--){
digit2=op2->digits[i]-48;
count++;
carry=0;

if(count==1){
count2=0;
}else{
count2=count-1;
}

/*the next malloc is the one that fails*/
if(NULL==(*(partial_results+(count-1))=(bignum_t*)malloc(sizeof(bignum_t)))){
return NULL;
}

/*after this the codes continues, but everything from here is ok an it isn't causing any problem*/

这里的问题是,我正在尝试创建一个 long_op2 元素数组(即 9),因此在第一个 malloc 中我创建了一个 9 bignum_t 指针数组。然后,在 for 内部,我尝试为数组的每个成员创建一个 bignum_t 结构。当 long_op2 小于或等于 6 时,我没有问题,但是当它大于或等于 7 时,第一个 malloc(应该创建指针的那个)不起作用。我收到错误,

tp3: malloc.c:2372: sysmalloc: 断言 (old_top == (((mbinptr) (((char *) &((av)->bins[(( 1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof (size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' 失败。
中止(核心转储)

问题是,我不想写超过创建数组的数量,因为如果 long_op2 为 9,则计数最大为 8,所以没关系。另一件很奇怪的事情是,当我使用 Valgrind 运行程序时,它确实有效!

PD:这是我在这里的第一个问题,所以如果我有任何错误,我深表歉意。

PD2:程序是这样工作的。

980581618*215129902

long_op1 & long_op2 9 9
for with: i, count-1 8 0
doing malloc malloc done
for with: i, count-1 7 1
doing malloc malloc done
for with: i, count-1 6 2
doing malloc malloc done
for with: i, count-1 5 3
doing malloc malloc done
for with: i, count-1 4 4
doing malloc malloc done
for with: i, count-1 3 5
doing malloc malloc done
for with: i, count-1 2 6
doing malloc malloc done
for with: i, count-1 1 7
doing malloc malloc done
for with: i, count-1 0 8
doing malloc
tp3: malloc.c:2372: sysmalloc: Assertion ...

最佳答案

对于这一行:

    /*the next malloc is the one that fails*/
if(NULL==(*(partial_results+(count-1))=(bignum_t*)malloc(sizeof(bignum_t)))){
return NULL;
}

无论如何:

count需要是 1 <= count <= long_op2 .如果它超出该范围,那么您将得到未定义的结果。我看不到 count 的初始化, 但你应该打印 count 的值在每个 malloc 之前输出。

这只是一个猜测,但我怀疑你真的是这个意思:

    partial_results[i]=(bignum_t*)malloc(sizeof(bignum_t));

关于C Malloc 断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706779/

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