我基本上有一个uint64\u t[8][3]
但是我不需要这个数组中的所有位置。我可以创建另一个节点结构来动态地只设置适当的位置,但这将更加困难,因为我的特定程序依赖于矩阵的索引。如何有选择地释放矩阵的某些索引。
例如,对于特定节点,我不需要uint64_t[4][3]或uint64_t[7][3],如何释放该节点?
你不能释放它,它是cpp,这就是它的工作原理...
这是不可能的,或者至少不是你想要的方式。如果你想实现一个类似二叉树的结构,看看二叉树,这样你就有了树结构,你可以动态地只分配你需要的东西。
如果您仍然需要数组,请不要使用旧的c样式数组,c委员会自1998年以来一直在积极更新该标准,使用数组的现代方式是使用std::array。如果您在使用旧C-API的环境中工作,请在现代C静态库中编写您的逻辑,编译它并在C-API中链接该库。
话虽如此,如果你担心性能或内存问题,你应该重新考虑你的思维方式,许多年轻的开发人员会陷入这种思维模式,最终编写的代码在设计方面既不快也不优雅(这叫做悲观代码)。当你编写一个程序时,首先从可读和简单的设计开始,然后进行分析,找出什么是缓慢的,应该优化。
如果您确实需要数组中的某些值为null,以便可以对其执行疯狂的操作(例如null检查,我非常不鼓励这样做),那么您应该将整数包装到另一个类中:
class Integer
{
public:
explicit Integer(int value)
{
value_ = value;
};
Integer &operator=(Integer other)
{
value_ = other.value_;
};
private:
int value_;
};
class test
{
public:
test()
{
Integer four(4);
std::array<std::unique_ptr<Integer>, 2> arr = { std::make_unique<Integer>(four), nullptr};
};
};
注一:我上面写的只是一个技巧,所以你知道在c语言中一切都是可能的,但是我刚刚写的东西的复杂性,让你相信,对于你的简单案例来说,这不是一个好方法。
注二:代码未经测试,请勿在生产代码中使用此代码。
如果使用delete动态分配某些索引中的元素(例如delete variableName[0][2]),则可以释放这些元素,但不能删除索引本身。
wcsdup等函数隐式调用malloc为目标缓冲区分配内存。我想知道,由于内存分配不是很明确,所以显式释放存储似乎合乎逻辑吗?这更像是一种设计困境,赞成和反对的理由如下 应释放,因为 不释放它会导致内存泄漏。 wcsdup/_wcsdup调用malloc来分配内存,即使是从C程序调用的。 不应该被释放,因为 wcsdup积累的内存最终会在程序退出时被释放。在整个程序生命周期中,我们总是会遇到一些内
问题内容: 假设我们有Java代码: 那会跑吗?进一步说明,如果我们尝试这样的操作: 那么arr1将是一个等效于2D的2D数组: 怎么样:如果我们直到运行时才知道该数组的维数怎么办? 编辑:如果这有帮助(我确定会…),我们正在尝试从形式为String的字符串解析未知维度的数组 要么 等等 Edit2:万一像我这样愚蠢的人尝试使用此垃圾,这是一个至少可以编译并运行的版本。逻辑是否合理完全是另一个问题
我尝试用以下方法调用三个引用游标参数: 但是listOfObjects只包含cursor1的内容,无法获得cursor2的内容。
问题内容: 我以前从未做过,也找不到答案。这可能不是用于此目的的正确数据类型,但是我只想分配一个int,然后将另一个没有in循环的int分配到2D数组中,值实际上是从另一个函数返回的,但是为了简单起见,只是使用in i和k,这就是我以为您会这样做的方式,但事实并非如此: TIA-如果我误选了错误的树,请随时向我指出一个更好的数据结构的方向。 问题答案: 最好的方法可能是一次声明并分配所有值。如图所
问题内容: 检查数组是 原始值的平面数组 还是 多维数组 的最有效方法是什么? 没有实际循环遍历数组并在其每个元素上运行的方法,有没有办法做到这一点? 问题答案: 简短的答案是,如果“第二维”可能在任何地方,您都必须至少隐式循环才能做到。如果必须在第一项中,您只需 但是,我能找到的最有效的通用方法是在数组上使用一个foreach循环,每当找到一个命中点时就会短路(至少隐式循环比直接的for()