繁体   English   中英

为什么/如何调用 printf 更改我的 function 的结果?

[英]Why / how does a printf call change result of my function?

首先我刚开始使用 C,所以也许我错过了一些非常愚蠢的东西。

但我有以下问题:

我有 function,如果我有一个 printf-call,那只会给我正确的解决方案。 如果没有那个调用,它会产生错误的结果。

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

但并非如此,一个简单的“printf(“test”);” 足以让 function 做我想要的。 这很好,但我当然想找到问题所在,特别是因为下一次它现在可能会起作用。

我想我的问题是,为什么 printf-call 会影响我的 function 这么多? 有普遍的原因吗?

在我的代码下面:

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;
}

堆栈溢出。 printf的调用会用非必要变量填充您的堆栈,因此覆盖不会中断它。 尝试达到最小的可重现示例或使用调试器来隔离错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM