我在 C 中使用 realloc 函数时遇到问题。我将以下代码传递给您:
typedef struct _Pool Pool;
typedef struct _Item Item;
struct _Pool {
Item ** items;
unsigned int itemsCount;
unsigned int poolSize;
unsigned int poolStep;
};
struct _Item {
char * file;
unsigned int lenOfFilePath;
unsigned int x;
};
void Pool_insert(Pool ** pool, Item * item)
{
if ((*pool)->itemsCount + 1 == (*pool)->poolSize)
{
(*pool)->items = realloc((*pool)->items, sizeof(Item *)*((*pool)->poolSize + (*pool)->poolStep));;
if (!(*pool)->items) return;
(*pool)->poolSize += (*pool)->poolStep;
}
(*pool)->items[(*pool)->itemsCount++] = item;
}
我没有发送第一个分配代码,但如果我增加我在那里使用的项目数量,一切正常。当我调用 realloc 时,我收到了这样的错误:
malloc:对象 0x19dba8 的 *** 错误:未分配正在重新分配的指针
你能帮我解决我的问题吗?
Pool的创建方法如下:
void Pool_create(Pool ** pool, unsigned int poolSize)
{
unsigned int poolMemSize = sizeof(Pool) + sizeof(Item *)*poolSize;
*pool = malloc(poolMemSize);
if (!*pool) return;
memset(*pool,0,poolMemSize);
(*pool)->itemsCount = 0;
(*pool)->poolSize = poolSize;
(*pool)->poolStep = POOL_STEP;
(*pool)->items = (Item **)((char*)(*pool) + sizeof(Pool));
if(!(*pool)->items) return;
memset((*pool)->items, 0, sizeof(Item *) * poolSize);
}
就像我说的,如果我想插入 1000 个项目并通过 create 函数分配内存,那么如果我声明 100 个元素的启动池大小然后我想重新分配项目,那么一切正常,我得到了错误。
非常感谢你这么快的回答。