c - C 中的重新分配错误

标签 c pointers malloc void realloc

我刚刚开始 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/

相关文章:

C 预处理器指令运算符##

python - 获取指针而不是字符串

c - 需要知道如何在 c 中按空格解析单词。还需要知道我是否正确分配内存?

c++ - 供应商是否将 new 和 malloc 实现为小对象分配器?

C 文件描述符复制而不共享偏移量或标志

康威的生命游戏问题更新板

c - 当链表增长超过 100 个元素时,链表头的值会默默地改变

c - 大小为 0 的数组如何存储在内存中?

c++ - 在类文件中包装 ZMQ C++ 时出错

c - 内存分配和泄漏问题?