Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printf调用为什么/如何更改函数的结果?_C_Sorting_Quicksort - Fatal编程技术网

C printf调用为什么/如何更改函数的结果?

C printf调用为什么/如何更改函数的结果?,c,sorting,quicksort,C,Sorting,Quicksort,首先,我刚从C开始,所以可能我错过了一些非常愚蠢的东西 但我有以下问题: 我有一个函数,它只给了我正确的解决方案,如果我有一个printf调用的话。没有这个调用,它会产生错误的结果 我在代码中有一些代码来检查错误,然后删除它们。所以我的第一个想法是,我也删除了一些重要的代码,我的下一个想法是,在printf调用中使用它们时,我更改了一个变量或其他东西 但事实并非如此,一个简单的“printf(“test”);”就足以让函数实现我想要的功能。这很好,但我当然想找出问题所在,尤其是下一次它可能会起作

首先,我刚从C开始,所以可能我错过了一些非常愚蠢的东西

但我有以下问题:

我有一个函数,它只给了我正确的解决方案,如果我有一个printf调用的话。没有这个调用,它会产生错误的结果

我在代码中有一些代码来检查错误,然后删除它们。所以我的第一个想法是,我也删除了一些重要的代码,我的下一个想法是,在printf调用中使用它们时,我更改了一个变量或其他东西

但事实并非如此,一个简单的“printf(“test”);”就足以让函数实现我想要的功能。这很好,但我当然想找出问题所在,尤其是下一次它可能会起作用

我想我的问题是,为什么printf调用对我的函数影响这么大?有一般原因吗

下面是我的代码:

void mergesort(int* array, size_t len)
{
    if (len <= 1)
    {
        return;
    }

    printf("test");

    size_t len2 = len / 2;

    int array_left[len2];
    int array_right[len-len2];
    size_t len_left;

    for (len_left = 0; len_left < len2; len_left++)
    {
        array_left[len_left] = array[len_left];
    }

    for (size_t i = len2; i < len; i++)
    {
        array_right[i-len2] = array[i];
    }

    mergesort(array_left, len_left);
    mergesort(array_right, len - len_left);

    size_t counter_left = 0;
    size_t counter_right = 0;

    for (size_t i = 0; i < len; i++)
    {
        if (array_left[counter_left] <= array_right[counter_right])
        {
            array[i] = array_left[counter_left];
            counter_left++;            
        }
        else
        {
            array[i] = array_right[counter_right];
            counter_right++;
        }
    }

    return;
}
void合并排序(int*数组,大小\u t len)
{

如果(len堆栈溢出。对
printf
的调用会用非基本变量填充堆栈,以便重写不会中断堆栈。请尝试获得最小的可复制示例或使用调试器隔离错误


编辑:我知道错误是
array\u right[I-len2]=array[I]
,询问者没有要求调试代码,但是
printf
如何影响结果。

堆栈溢出。调用
printf
会用非基本变量填充堆栈,以便重写不会中断它。尝试获得最小的可复制示例,或者使用调试器隔离错误


编辑:我知道错误是
array\u right[I-len2]=array[I]
,询问者没有要求调试代码,但是
printf
如何影响结果。

你的包含项在哪里?主项在哪里?
main
?你用哪种输入获得哪种输出,你期望哪种输出?请显示a。阅读以下内容:。你应该测试计数器_left和计数器_right不超过len_left和len-len_left.Check用于越界数组索引。访问具有越界索引的数组会导致未定义的行为,其中包括“显然工作正常”。对我来说,这似乎是一个最小的可复制示例,我不需要
int main{}
了解此问题。此外,在这些情况下,减少代码量无助于解决问题,因为代码本身存在太多错误,必须对其进行调试。若要修复实际错误,请尝试替换
if(array_left[counter_left]您的include在哪里?Where is
main
?您使用哪种输入获得哪种输出,以及希望获得哪种输出?请显示a。阅读以下内容:。您应该测试计数器_left和计数器_right,使其不超过len_left和len-len_left。检查是否存在越界数组索引。访问具有越界索引的数组会导致未定义d bahaviour,其中包括“显然工作良好”。对我来说,这是一个最小的可复制示例,我不需要
intmain{}
了解这个问题。此外,在这些情况下,减少代码量无助于解决问题,因为代码本身有太多的bug,必须对其进行调试。要修复实际的bug,请尝试替换
if(array_left[counter_left]为什么说
该array_right[i-len2]=array[i]
有错吗?或者应该怎么做?当我试图找到错误时,我在其他解决方案中看到了这一点。问题似乎可以得到解决,而不会造成混乱。为什么你会说
数组对[I-len2]=array[I]
是错误的吗?或者应该怎么做?我在其他解决方案中看到了这一点,当时我试图找到我的错误。问题似乎可以得到解决,而不会造成混乱。