gpt4 book ai didi

c - 在 C 中对动态分配的可变长度字符串数组进行排序

转载 作者:行者123 更新时间:2023-11-30 20:12:19 24 4
gpt4 key购买 nike

我有一个动态分配的字符串数组,我已将其设置为最后一项始终为NULL。现在,我想实现各种排序函数,从字母顺序开始(但我不关心这里的比较函数本身)。

我写了这个基本的排序函数:

void string_sort(char **array)
{
char *tmp = malloc(sizeof(char*));
int i = 0;

while (array[i + 1] != NULL) {

int j = 0;

while (array[j + 1] != NULL) {

if (strcmp(array[j], array[j + 1]) > 0) {
strcpy(tmp, array[j]); /* line 91 */
strcpy(array[j], array[j + 1]); /* line 92 */
strcpy(array[j + 1], tmp);
}
j++;
}
i++;
}
free(tmp);
}

现在,这个功能似乎可以工作,排序是正确的。但 valgrind 多次说了这些:

大小 1 的写入无效(第 92 行)

大小 1 的读取无效(第 91 和 92 行)

我做错了什么导致内存严重破坏?

最佳答案

复制文本总是会导致内存错误,除非所有文本缓冲区具有相同的长度(而不是:字符串具有相同的长度),您可以简单地交换 指针:

  if (strcmp(array[j], array[j + 1]) > 0) {
char *tmp= array[j]; /* line 91 */
array[j]= array[j + 1]; /* line 92 */
array[j + 1]= tmp;
}

关于c - 在 C 中对动态分配的可变长度字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36117747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com