【发布时间】:2019-09-04 21:24:51
【问题描述】:
在this question 之后,我正在尝试修改this blog post 中提供的代码,以使用动态内存分配创建append 函数。这是我目前所拥有的:
#include <stdio.h>
#include <stdlib.h>
typedef struct intlist_ {
int size;
int* list;
} intlist;
void append(intlist* arr, int value){
realloc((*arr).list, sizeof((*arr).list) + sizeof(int));
(*arr).size = (*arr).size + 1;
(*arr).list[(*arr).size -1] = value;
}
int main() {
intlist arr;
arr.size = 4;
arr.list = malloc(arr.size * sizeof(int));
arr.list[0] = 0;
arr.list[1] = 5;
arr.list[2] = 3;
arr.list[3] = 64;
append(&arr, 12);
for (int ii = 0; ii < arr.size; ii++)
printf("%d, ", arr.list[ii]);
free(arr.list);
return 0;
}
但是我得到的结果是错误的:
clang 版本 7.0.0-3~ubuntu0.18.04.1 (tags/RELEASE_700/final) main.c:10:3:警告:忽略用声明的函数的返回值 'warn_unused_result' 属性 [-Wunused-result] realloc((*arr).list, sizeof((*arr).list) + sizeof(int)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 生成 1 个警告。 0, 5, 3, 64, 0, 5, 3, 64, 12,
我正在使用this online compiler 进行测试,您还可以在其中看到上述代码的最新版本。如果您能帮助我知道我的错误在哪里以及如何解决它,我将不胜感激。提前感谢您的支持。
P.S.您可以在this Gist这里获得代码的最终版本。
【问题讨论】:
-
为什么你认为结果是错误的?我试图编译它,我得到了正确的结果。
-
@EmirG。你说的对。我在原来的帖子中犯了一个可怕的错误,忘记评论第一个 for 循环。 :( 耻辱。但是我收到的警告仍然是一个问题。
标签: c arrays append dynamic-memory-allocation