m0_49164409 2023-12-06 12:05 采纳率: 0%
浏览 18
已结题

定义过的变量报错未定义

这里面报错了pivot未定义,挠头,不知道为什么


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int partition (char** arr, int low, int high) {
    char* pivot = arr[high]; 
    int i = (low - 1); 

    for (int j = low; j <= high- 1; j++) {
        if (strcmp(arr[j], pivot) <= 0) {
            i++; 
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}
  • 写回答

22条回答 默认 最新

  • 小明爱吃火锅 2023-12-06 13:01
    关注
    获得7.50元问题酬金

    引用文心一言及其思考回答:
    从你的代码来看,你似乎在尝试实现一个基于快速排序的pivot函数。不过在你的代码中,确实存在一些问题。

    问题出在这一行:char* pivot = arr[high];

    你正在试图将一个字符指针赋值给一个字符指针,这可能是问题的根源。你的arr数组似乎是一个字符串数组,所以每个元素都是一个指向字符的指针。当你尝试获取arr[high]时,你实际上是获取一个指向字符的指针,而不是复制这个字符。

    为了解决这个问题,你需要复制这个字符串,而不是仅仅获取它的地址。你可以使用strcpy函数来实现这一点。以下是修复后的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void swap(char **a, char **b) {
        char *temp = *a;
        *a = *b;
        *b = temp;
    }
    
    int partition (char** arr, int low, int high) {
        char* pivot = malloc(strlen(arr[high]) + 1);  // 分配足够的内存来存储字符串
        strcpy(pivot, arr[high]);  // 复制字符串
        int i = (low - 1); 
     
        for (int j = low; j <= high- 1; j++) {
            if (strcmp(arr[j], pivot) <= 0) {
                i++; 
                swap(&arr[i], &arr[j]);
            }
        }
        swap(&arr[i + 1], &arr[high]);
        free(pivot);  // 释放分配的内存
        return (i + 1);
    }
    

    注意,我在这里添加了一个swap函数的定义,因为在你的原始代码中没有定义这个函数。此外,我还添加了一个free(pivot)的调用,以释放我们为pivot分配的内存。如果我们不这样做,我们可能会在程序中留下未使用的内存,这可能会导致内存泄漏。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 创建了问题 12月6日