【发布时间】:2025-12-13 16:05:01
【问题描述】:
我遇到了一个奇怪的使用字符串函数分配内存的行为。
注意:现在我被告知忽略分配操作的失败。
我的代码是:
void string_reallocation(char *result, int result_length) {
char *temp_result = malloc((strlen(result) + 1) * sizeof(char));
strcpy(temp_result, result);
realloc(result, (result_length + 1) * sizeof(char));
strcpy(result, temp_result);
free(temp_result);
}
在 while 循环中通过迭代调用此函数:
while (current_node != NULL) {
current_value_to_string = current_node->toStringFunc(current_node->value);
current_value_length = (int) strlen(current_value_to_string);
current_length += current_value_length + arrow_length;
string_reallocation(result, current_length);
strcat(result, current_value_to_string);
strcat(result, arrow);
current_node = current_node->next;
}
current_node 的类型如下:
typedef struct t_node {
Element value;
struct t_node *next;
elementDestroy destroyFunc;
elementCopy copyFunc;
elementToString toStringFunc;
} *Node;
问题是,出于某种原因,特别是在第三次迭代中,free(temp_result); 因分段错误而失败。
我不认为 while 循环与分段错误有任何关系,但我把它放在这里以防万一。
【问题讨论】:
-
试试
result = realloc(result, (result_length + 1) * sizeof(char));。 GTG -
@chux-ReinstateMonica 现在在第三次迭代后
result的值是乱码。 -
另外,char *result 必须是 char **result,因为 char * 的地址只会在堆栈上被覆盖,并且函数结束后你会丢失 realloc 返回的新地址
标签: c pointers malloc free realloc