gpt4 book ai didi

c++ - 使用 BigInteger 数组时出现 Malloc 错误

转载 作者:行者123 更新时间:2023-11-28 00:14:27 25 4
gpt4 key购买 nike

我正在使用 Matt McCutchen's BigInteger library对于我的一个项目,我在使用 BigInteger 数组时遇到了一个小问题:

下面的代码给我 malloc: *** error for object 0x7: pointer being freed was not allocated
*** 在malloc_error_break 设置断点调试

long create_db(BigInteger min_abc, BigInteger max_abc,
BigInteger*& abc_range, stats*& run_stats) {

// Easiest way to do ceil with bigint is via an if statement
BigInteger temp = (max_abc - min_abc) % JUMP == 0 ? (max_abc - min_abc) / JUMP : ((max_abc - min_abc) / JUMP) + 1;
long num;
sscanf(bigIntegerToString(temp).c_str(), "%ld", &num);
// If the number is too big for a long, it cannot be addressed by a 64-bit computer.


abc_range = (BigInteger*) malloc(num * sizeof(BigInteger));
run_stats = (stats*) malloc(num * sizeof(stats));

// Min is already known, so it is unnecessary
for(long i = 1; i <= num; i++) {
if (i == num) {
abc_range[i - 1] = max_abc;
} else {
BigInteger temp = min_abc + (JUMP * i);
abc_range[i - 1] = temp; // <--- Error here
}
//abc_range[i - 1] = i == num ? max_abc : min_abc + JUMP * i;
run_stats[i - 1] = READY;
}

return num;
}

地址0x7就是abc_range[0]指向的数组:

p abc_range[0]
(BigInteger) $1 = {
sign = positive
mag = {
NumberlikeArray<unsigned long> = {
cap = 0
len = 1
blk = 0x0000000000000007
}
}
}

并且出于某种原因,我的程序在使用运算符 = 时试图释放指针。我试过使用 new 而不是 malloc 但我得到了相同的结果。

我做错了什么?

最佳答案

malloc 分配内存但不调用任何构造函数。这就是在 C++ 中引入 new 的原因。

你应该试试

abc_range = new BigInteger[num];

或者您必须在 malloc 之后使用 new 位置显式调用构造函数。

NumberLikeArray 的默认构造函数如下

NumberlikeArray() : cap(0), len(0) {
blk = NULL;
}

这意味着默认构造函数肯定不会被调用,因为你在那里有 0x7。

关于c++ - 使用 BigInteger 数组时出现 Malloc 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31257976/

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