gpt4 book ai didi

C++ Void双指针干扰另一个

转载 作者:行者123 更新时间:2023-11-27 22:32:22 26 4
gpt4 key购买 nike

我正在尝试做一个涉及重载新建和删除的项目。我将一个空指针数组(指向分配的随机内存的指针)存储在一个双空指针中。当然,需要调整此数组的大小以应对更多的空指针。

这是数组的初始化,allocArraySize(int) 设置为 4。

void** allocArray = (void**) calloc ( allocArraySize, sizeof(void*) );

将所有值设置为 nullptr..

for(int i=0; i<allocArraySize; i++){ *(allocArray + i*sizeof(void*)) = nullptr; }

但是,当尝试调整数组大小时,我注意到当我创建一个新的临时数组(temp)来存储它们时,我的原始空指针数组被修改了。

// PRINTS THE ORIGINAL ARRAY 
for(int i=0; i<allocArraySize; i++){std::cout<<i<<" = "<<*( allocArray + i*sizeof(void*))<<"\n";}

void** tempArray = (void**)calloc(allocArraySize, sizeof(void*));

// PRINTS THE ORIGINAL ARRAY
for(int i=0; i<allocArraySize; i++){std::cout<<i<<" = "<<*( allocArray + i*sizeof(void*))<<"\n";}`

请注意,我什至还没有将数组值放入临时数组中,我仍然遇到这个问题。这是为什么?为什么这个随机值在确实被初始化时被分配给这个点?这个新的临时数组变量如何扰乱我的数组?

注意:这基本上是完整的代码。唯一缺少的是主函数、iostream 和 allocArraySize 的声明。是的,我很清楚我不会释放这些可怜的双指针。我只是想尽可能用最简单的术语来创建问题。

最佳答案

sizeof 乘数不应该存在:

*(allocArray + i*sizeof(void*))
// ^^^^^^^^^^^^^^ this shouldn't be here

void** 是强类型的。它通过指针算法参与适当的偏移量计算。这里不需要计算 sizeof 偏移量。该循环似乎是为了转储序列中的指针值而设计的,因此应该是:

for(int i=0; i<allocArraySize; i++)
{
std::cout<< i << " = " << allocArray[i] << "\n";
}

关于C++ Void双指针干扰另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59348890/

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