【发布时间】:2012-03-10 21:24:28
【问题描述】:
我正在尝试为一个班级项目编写一个内存分配器,因为没有分配,所以没有必要的作业,我自己选择了这个项目。
我有两行标记为 #1 和 #2,两者都不起作用并给出不同的错误消息,这里是详细信息。
我收到以下错误消息(针对 #1):从类型“int *”分配给类型“size_t *[10]”时类型不兼容
--- 或 ---
(对于 #2) 错误:从类型“size_t **”分配给类型“size_t *[10]”时类型不兼容
我不明白为什么创建一个相同类型的空数组(#2)仍然不能进行“转换”。如果两个数组都是 size_t* 类型,为什么在尝试将 FREE_ARRAY 设置为新数组时会收到第二条错误消息?
void expandArray(void)
{
//size_t* FREE_ARRAY[10]; #This is how FREE_ARRAY is declared.
size_t* oldArray = FREE_ARRAY;
int newArray[freeArraySize*2]; #1
//size_t* newArray[freeArraySize*2]; #2
FREE_ARRAY = newArray;
int i = 0;
for (i=0; i<freeArraySize; i++)
{
FREE_ARRAY[i] = oldArray[i];
}
for (i=freeArraySize; i<(freeArraySize*2); i++)
{
FREE_ARRAY[i] = (size_t)NULL;
}
freeArraySize = freeArraySize*2;
}
感谢您的帮助!
【问题讨论】:
-
您的代码没有意义:
oldArray的类型为size_t *(指向size_t的指针),FREE_ARRAY的类型为size_t * [10](十指向size_t)。一个是柠檬,一个是比萨,你不能把它们混合成奶昔。 -
知道如何完成我想做的事情吗?您是否引用 [10] 是因为两个数组的大小必须为 10 才能相互设置?
-
您需要使用正确的类型,了解数组的工作原理,并且可能了解动态内存分配和管理。对于一个 SO 问题来说,这是一个相当高的要求,而且我想说,一本好的 C 教科书也没有涵盖任何内容。通过结构化阅读而不是直接跳到中间,您可能会更好地了解这一点。
标签: c memory-management type-conversion