我刚刚开始 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
最佳答案
这个
void *realloc(void *p, 20*sizeof(int));
错了。你要
p = realloc(p, 20*sizeof(int));
顺便说一下,这一行也是一个问题(但可以正常编译):
for (int i = 0; i < 21; i++){
您将 p 分配给 20*sizeof(int) 字节,因此元素 20 超出了数组的末尾。你想要:
for (int i = 0; i < 20; i++){
关于c - C 中的重新分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11974719/