gpt4 book ai didi

c++ - 两个数组的内存地址重叠

转载 作者:行者123 更新时间:2023-11-30 01:26:42 25 4
gpt4 key购买 nike

我正在研究二进制矩阵。我的两个数组重叠了。 (我检查了地址)。这只发生在少数尺寸的矩阵上。因此我得到了错误的结果。我尝试使用 new 来分配数组,但是当我这样做时出现段错误。有什么办法可以避免内存重叠?我正在使用 g++ 编译器。

这是我声明数组的方式

bool A[size0][size0],B[size0][size0],C[size0][size0];

在下一步中,我会初始化所有这些。 A 和 B 是操作数,C 将保存结果。

我在下一阶段使用自定义乘法算法。这是一个片段

 for(I=0;I<cnm;I++){  
bool Tab[m][size];
bool Ctemp[size][size];

int count=0;
for(uint i=0;i<pow(2.0,m*1.0);i++){
for(uint j=0;j<n;j++){
Tab[i][j]=0; //Initialize
if(i==0){
Tab[i][j] = 0;
}
else{
int dec;
//h is calculated here
dec=gray_map[i-1]^gray_map[i]; //gray_map returns gray code
Tab[i][j] = Tab[i-1][j] ^ B[h][j];
}
....
....
}
}
.....
.....
//Rest of the code

根据我的观察,TabC 是重叠的。我通过打印来检查内存地址。它们在第二级 for 循环的第六次迭代时重叠。(n=9, m=3, size=9, cnm=3)。我没有在中间使用 C,我只在外循环中使用它。

最佳答案

C-Compliers 不允许重叠数组(除非你告诉他们,否则他们真的有问题)。

大多数情况下,此类错误的原因是错误的指针算法或错误的数组访问。

即使在你的代码上只花了 3 秒,我发现你的访问有问题:

你声明了 Tab[m][..] 但是你得到了一个从 0 到 2^m 遍历 i 的循环(顺便说一句,使用 pow 来计算它,是不太好,改用左移 (<<))。然后您访问 Tab[i][...],因此大多数时候您在未声明的索引处访问 Tab。

关于c++ - 两个数组的内存地址重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9871697/

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