如何使用 calloc/malloc 等函数对动态创建的存储进行正确排序,使其以 FIFO 方式运行



我对编程很陌生,也是自学成才的,所以如果我使用了一些不正确的术语,请原谅我。

我正在使用calloc()在我的堆中创建存储空间,我可以保证被初始化,因为没有放入垃圾值。通过观察 calloc 的行为,似乎有一个单一指针用于指向指定大小类型的整个地址块。一旦我递增以在下一个地址中存储某些内容,就不再有任何指向前一个地址的内容。我在这里寻找答案,但无法编写任何有效的代码。最终,我只是做了一个计数器来跟踪我递增指针的次数,然后递减该量,然后从我动态创建的数组中读取,我再次递增它。

虽然它确实有效,但我忍不住认为有更好的方法可以做到这一点。我也认为我已经走得足够远,以至于我可以通过使用糟糕的方法论来达到我的目的,但知识还不够丰富,甚至不知道在尝试研究我的问题时使用什么术语。我知道 calloc 数组存储在堆上,直到我释放分配给它的每个连续空间。我开始搜索"堆排序",但我相信这超出了我的范围,并且对于我试图做的事情来说过于复杂。我还将其存储在预定义的数组中,用作缓冲区,但同样,我只想直接从 calloc 数组中读取,即使这涉及使用另一个指针来执行此操作。为了避免进一步的漫无边际,如果有人能好心地指出我正确的方向。谢谢。

保留一个变量,该变量跟踪 calloc 返回的原始指针。

此外,您可以通过将 calloc 视为数组来访问不同的值。

如果你发布一些代码,我可以给你举个例子。

现在忘记 C 级函数,如 mallocfree .

也忘记C++级别同上运算符,如 newdelete .

使用<queue>标头中的std::queue


用法示例:

#include <iostream>
#include <queue>
using namespace std;
auto main() -> int
{
    queue<int> q;
    q.push( 7 );
    for( int i = 1; i <= 29; ++i )
    {
        const int x = q.front();
        q.pop();
        if( x % 7 == 0 )
        {
            for( int j = 0; j < 10; ++j )
            {
                q.push( 10*x + j );
            }
        }
        cout << x << endl;
    }
}

最新更新