【发布时间】:2016-02-27 01:17:09
【问题描述】:
我正在编写小型内存分配系统。有:
typedef struct _POOL
{
int size; /*size of memory pool*/
void* memory; /*pointer to pool location in memory*/
} Pool;
Pool* allocatePool(int n) {
Pool *myPool = malloc(sizeof(Pool) + n);
if (myPool){
myPool->size = n;
myPool->memory = myPool+1;
}
return myPool;
}
我正在尝试编写函数,该函数将在池中的位置偏移处存储 n 大小的任意对象。
void store(Pool* pool, int offset, int size, void *object) {
char *ptrHelper;
ptrHelper = &(pool->memory); /*copy pool memory address*/
ptrHelper += offset; /*increment to match offset*/
memcpy(ptrHelper, &object, size); /*copy object in to the pool*/
}
问题:
ptrHelper = &(pool->memory) 还有另一种获取池内存地址的正确方法吗?
如果我想要存储的值大于 void *object 的大小(在我的情况下为 4 个字节),该怎么办?
如何在不改变函数参数结构的情况下正确处理字符串? 谢谢。
【问题讨论】:
-
为什么是
&(pool->memory)而不是pool->memory?似乎pool->memory已经是指向池的指针。为什么要取它的地址?如果offset为0,你不会覆盖pool->memory吗? -
pool->memory 是我的池的基地址。增加它的地址会更改我的池的地址并将偏移量设置为 0 对我的目标地址没有任何作用。我可能错了。这些是我进入 C 的第一步 :)。
-
这是第二次转发!仅供参考:我将其标记为 mod 注意。堆栈溢出不是一个教程网站。如果您缺乏基础知识,请阅读 C 书籍并从更简单的内容开始练习。
-
@Olaf 我与版主讨论了我的帖子。我们得出的结论是我应该删除我以前的帖子并重新提出我的问题。所以我做到了。
-
您应该在问题中提到这一点。不管怎样,我们会看看一个模组能做什么;我仍然认为你的问题太宽泛了(显然我不是唯一一个)。无意冒犯(老实说!),但是您确实应该首先在 C 中进行更多练习,并学习如何在 C 中做一些事情。内存管理包括相当多的不严格标准兼容操作的部分,初学者应该明确避免。我已经看到了各种——嗯——“有问题的”问题。而且您的代码部分不符合实际上应该!
标签: c pointers memory memory-management