【发布时间】:2012-08-12 01:37:55
【问题描述】:
我刚刚开始 C 阅读手册页,但找不到正确的答案。所以代码如下
void *p = malloc(10*sizeof(int));
int *q = p;
int NUMOFINT = 10;
for (int i = 0; i < NUMOFINT; i++){
printf("%i ", q[i]);
}
void *realloc(void *p, 20*sizeof(int));
for (int i = 0; i < 21; i++){
printf("%i ", q[i]);
它给出了这个错误:
malloc.c: In function ‘main’:
malloc.c:31:24: error: expected declaration specifiers or ‘...’ before numeric constant
我不太明白 malloc() 的大小格式可以,但 realloc 的大小格式不行。那么如何纠正错误呢?
编辑:
所以当我把它变成:
void *morep = realloc(p, 20*sizeof(int));
int *q2 = morep;
for (int i = 0; i < 20; i++){
printf("%i ", q2[i]);
}
它将q2[11] 打印为135121
【问题讨论】:
-
对 realloc 的调用一团糟,可能是
void *new_p = realloc(p, 20*sizeof(int));之类的东西。您尚未声明一个指针来保存realloc的返回值,并且在调用该函数时您正在(重新)声明一个指针p。 -
那会重新分配实际的 p void 吗?
-
是的,如果您在 *nix 系统上,请参阅功能 documentation 或
man页面了解更多详情 -
另外,第二个 for 循环应该是 20,而不是 21。当它的大小为 20 时,您不想读取 p[20]。
-
您的
realloc行看起来像是原型和调用的混合体。您不需要原型(它在标题<stdlib.h>中),调用应该类似于tmp = realloc(oldpointer, <NEW_SIZE>); if (!tmp) /* error */; oldpointer = tmp;
标签: c pointers malloc void realloc