【发布时间】:2012-03-17 16:40:32
【问题描述】:
我不断传入并返回 dirs_later_array。当我在 else 块中到达“new_size = ...”时,我第二次得到 new_size 为 2。到目前为止,一切都很好。但是当我重新分配时
dirs_later_array = realloc(dirs_later_array,
new_size * sizeof(struct dirs_later*));
对于 dirs_later_array,sizeof 保持在 4,即指针的大小。我能够成功地存储在 dirs_later_array[1] 但下次我进入函数时该值会不断被覆盖。
struct dirs_later** add_struct(const char *findme, struct dirent *dptr, struct stat *this_lstat, char *relative_path, const char *type_str, 结构 dirs_later **dirs_later_array) { 结构 dirs_later *new_dir = malloc(sizeof(struct dirs_later)); check_realloc_dirs_error(new_dir); if (strcmp(dptr->d_name, ".")) { //目录和不同目录 //复制结构体的相对路径 字符 *relative_path2; relative_path2 = malloc(strlen(relative_path) + 1); check_realloc_error(relative_path2); strcpy(relative_path2, relative_path); //if (strlen(relative_path) > 0) // relative_path2[strlen(relative_path) - 1] = '\0'; 如果(NULL!= new_dir){ new_dir->findme = findme; 新目录->dptr = dptr; 新目录->st_mode = this_lstat->st_mode; new_dir->relative_path = relative_path2; new_dir->type_str = type_str; } int new_size = 0; /* //检查这是否是结构中的第一个元素 if (sizeof(dirs_later_array) / sizeof(struct dirs_later*) == 1) { 新尺寸 = 1; } */ 如果(dirs_later_array == NULL){ dirs_later_array = malloc(sizeof(struct dirs_later*)); //存放目录结构或稍后处理 check_realloc_arr_error(*dirs_later_array); 新尺寸 = 1; } 别的 { //将目录添加到目录数组 new_size = ((((sizeof(dirs_later_array) + sizeof(struct dirs_later*)))/sizeof(struct dirs_later*)); //printf("新尺寸:%d",new_size); } dirs_later_array = realloc(dirs_later_array, new_size * sizeof(struct dirs_later*)); check_realloc_arr_error(dirs_later_array); dirs_later_array[new_size - 1] = new_dir; } 返回 dirs_later_array; }【问题讨论】:
-
realloc不会调整任何东西的大小,它只是分配指定为参数的动态内存并将其分配给您的指针。 -
@Als 但确实如此!它确实会调整大小!
-
@Als - Any 还确保原始内容保持不变(就新的空间量而言)
-
这是一个基本的 C 和 C++ 规则,即事物的大小不取决于它包含的值。如果不是这种情况,怎么知道要传递给
malloc的大小?您需要值来知道大小,但如果您有放置值的地方,您可能不需要调用malloc。
标签: c