删除未使用的变量会导致代码崩溃

时间:2015-07-04 22:25:18

标签: c unused-variables

所以我试图将.s19文件中的s-records加载到内存中,以便我正在进行的任务及其工作。但是,当我从代码中删除一个未使用的数组时,一切都会停止工作并崩溃。

未使用的数组是:

char test[65536];

这是我写过的装载机:

void loader(FILE * srec)
{
    char instring[SREC_LEN];
    char test[65536]; // This isn't used, but the program crashes without it for some reason
    int i=0;
    int j=0, k,l;
    while (fgets(instring, SREC_LEN, srec) != NULL)
    {

        while(instring[i] != '\n') // Counts the characters in the s-record
        {
            i++;

        }
        j = j+i;
        for(k=0;k<=i;k++) // Puts the records into memory
        {
            memory[l] = instring[k];
            l++;
        }
        l = j;

    }
    #ifdef DEBUG
    printf("MEMORY: %s",memory);
    #endif // DEBUG
}

如果你能帮助我理解为什么会这样,我会很感激。

1 个答案:

答案 0 :(得分:1)

您的代码具有未定义的行为,它只能通过纯粹的运气来运行:

如果过早地达到fgets()

EOF可能会返回而不会将换行符写入缓冲区。所以你至少应该在你的循环中考虑到这一点。此外,您永远不会将i重置为0,您应该这样做。改变这个:

    while(instring[i] != '\n') // Counts the characters in the s-record
    {
        i++;

    }

为:

    i = 0;
    while(instring[i] != '\n' && instring[i] != '\0') // Counts the characters in the s-record
    {
        i++;

    }

l永远不会被初始化;你可能在memory中写出了界限。将l初始化为0:

int j = 0, k, l = 0;

(我假设memory足以容纳所有东西。)

在我看来,您希望for(k = 0; k < i; k++)而不是for(k = 0; k <= i; k++),因为i是您要复制的字符数。

您可能希望改为使用memcpy()