struct variable__array* array = (struct variable_array*)realloc(struct variable_array* array,sizeof(struct variable_array)+fisrt_size*sizeof(int));
时间: 2023-12-18 15:02:09 浏览: 149
这段代码中,realloc函数的作用是重新分配内存空间给变量array,以满足新增加的内存需求。具体来说,这个函数会将原有的内存块大小扩大到原来的大小再加上fisrt_size乘以sizeof(int)的大小,并返回一个指向新内存块的指针。在这个例子中,原来的内存块是一个结构体variable_array的大小,realloc函数将其扩大后返回一个新的指针,该指针指向的内存块大小为原来的大小加上fisrt_size乘以sizeof(int)的大小。这个新的内存块可以用来存储更多的整数数据。
相关问题
error: too few arguments to function ‘realloc’ struct variable__array* new_array = (struct variable_array*)realloc(void* new_array,sizeof(struct variable_array)+fisrt_size*sizeof(int));
这个错误是因为你在调用 `realloc` 函数时忘记传递第二个参数,即需要重新分配的内存大小。正确的调用方式应该是这样的:`realloc(new_array, sizeof(struct variable_array) + first_size * sizeof(int))`。其中,第一个参数是需要重新分配内存的指针,第二个参数是需要重新分配的内存大小。请注意,第一个参数不能是 `void*` 类型,应该是你需要重新分配内存的指针类型。
#include<stdio.h> #include<stdlib.h> #define error 0 #define ture 1 struct variable_array { int length_array; int array[0]; }; struct variable_array* variable_array_create(int fisrt_size) { if(fisrt_size <= 0 ) return error; struct variable__array* array; array = (struct variable_array*)malloc(sizeof(struct variable_array)+fisrt_size*sizeof(int)); if(!array) return error; array->length_array = fisrt_size; return array; } struct variable_array* variable_array_change (struct variable__array* array ,int new_size) { if(new_size <= 0)return error; struct variable__array* array = (struct variable_array*)realloc(struct variable_array* array,sizeof(struct variable_array)+fisrt_size*sizeof(int)); array->length_array = new_size; return array; } void variable_array_print(struct variable_array* array) { if(!array)return error; for(int i = 0; i < array->length_array; i++) printf("%d "array->array[i]); puts(" "); } static inline void variable_array_free(struct variable_array*array) { free(array); } int main(void) { struct variable_array* tp,*t; tp = variable_array_create(10); for(int i=0; i<10 ; i++){ tp->array[i]=i+1; } variable_array_print(tp);//查看赋值是否正确 t = variable_array_change(tp,5); if (!t) return error; tp = t; variable_array_print(tp); variable_array_free(tp); return 0; }的错误分析
这是一个使用 C 语言编写的动态数组实现,其中有一些错误:
1. 宏定义应该使用大写字母,例如 #define ERROR 0。
2. 在函数 variable_array_create 中,当传入参数 fisrt_size 小于等于 0 时,应该返回 NULL,而不是返回错误代码 0。
3. 在函数 variable_array_change 中,应该先使用一个新的变量名来接收 realloc 后的地址,而不是直接使用原来的变量名,例如:struct variable__array* new_array = (struct variable_array*)realloc(array,sizeof(struct variable_array)+new_size*sizeof(int));
4. 在函数 variable_array_change 中,当传入参数 new_size 小于等于 0 时,应该返回 NULL,而不是返回错误代码 0。
5. 在函数 variable_array_print 中,应该在 printf 函数中添加逗号,例如:printf("%d ", array->array[i]);
6. 在函数 variable_array_free 中,应该检查参数是否为 NULL,否则可能会导致程序崩溃。
除此之外,还有一些细节问题,例如结构体名称拼写错误、变量名重复等,需要仔细检查和修改。
阅读全文