gpt4 book ai didi

c++ - 无法释放内存

转载 作者:搜寻专家 更新时间:2023-10-31 01:59:54 24 4
gpt4 key购买 nike

在代码中:

  template<class T,int row, int col>
void invert(T (&a)[row][col])
{
T* columns = new T[col * row];
T* const free_me = columns;
T** addresses = new T*[col * row];
T** const free_me_1 = addresses;
/*cpy addresses*/
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
*addresses = &a[i][j];
++addresses;
}
}
addresses = free_me_1;
/*cpy every column*/
for (int i = 0; i < col; ++i)
{
for (int j = 0; j < row; ++j)
{
*columns = a[j][i];
++columns;
}
}
columns = free_me;
/*cpy from columns to addresses*/
for (int i = 0; i < (col * row); ++i)
{
*addresses[i] = columns[i];
}

delete[] free_me_1;
delete[] free_me;
}

我观察到在迭代时,变量列的值等于零,我认为这就是问题所在。
感谢您的帮助。

附言我已经粘贴了这个 fnc 的最终版本。它现在按预期工作。感谢大家的宝贵帮助。

最佳答案

因为缓冲区太小,你写过了缓冲区末尾。

T* columns = new T[col];

应该是

T* columns = new T[col*row];

越过缓冲区末端的写入是未定义的行为 - 在您的情况下是堆损坏,因为您覆盖了一些对堆功能至关重要的服务数据,因此 delete[] 失败。

关于c++ - 无法释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2565982/

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