【发布时间】:2014-01-22 19:08:20
【问题描述】:
首先我想说我确实搜索过,但我不明白针对现有问题提出的解决方案。
这是我的问题。
Array *create()
{
static Array *arr1;
void *arraypointer;
if ((arraypointer = (Array *) malloc(sizeof(Array))) == NULL) {
printf("Array not created because no memory is available. \n");
} else {
arraypointer = arr1;
printf("Array created successfully. \n");
}
return arr1;
}
我认为这很好。现在,我想在数组中添加一些东西,所以显然我需要增加内存的大小。目前,我有这个。
void add(Array S[], Item x)
{
static Array *arr1;
void *arraypointer;
arraypointer = (Array *) malloc(sizeof(Array) + 1);
if (is_element_of(x, S) == true) {
printf
("Item already exists in array and therefore it can't be added. \n");
} else {
strcpy(S->arr1[S->s].sinput, x.sinput);
S->arr1[S->s].iinput = x.iinput;
S->s++;
printf("Item added successfully. \n");
}
}
我觉得这不好,虽然我不知道该怎么做。我得到的警告是 Add 方法中没有使用 arr1 和 arraypointer 。
我该怎么办?
谢谢
附:如果您保持简单,我将不胜感激,因为我仍在努力解决这个 malloc 问题。
【问题讨论】:
-
对缩进做点什么
-
.. 还有你为什么用
void * -
请向我们展示
Array结构。 -
你的
create函数的代码证实你很困惑。为什么保存返回值的变量是static?为什么拥有void*类型的malloc的返回的临时对象是void*?为什么不直接在声明时初始化呢?为什么要投malloc的回报?为什么将值与NULL进行比较,而不是直接使用指针值作为条件?为什么在else子句中这样分配?您迫切需要阅读 SO 和其他方面的常见问题解答。 -
我修正了你的缩进。好好看看你现在在做什么,看看是不是更清楚。
标签: c arrays dynamic malloc realloc