C错误-一切正常,但无法删除未使用的变量

时间:2019-03-22 13:55:09

标签: c

调试器没有错误或警告,但是内存清理程序显示“未初始化的访问”,每行输出一个。

输出很好,除非我改变了大小甚至注释掉了一个我什至无法访问的数组(char ArrayThatINeverEvenUsed [10000]),否则输出是意外的。未初始化的访问错误会同时出现在正确/预期的版本和错误的版本中。

#include <stdio.h>

int main()
{
    FILE *fptr;
    fptr = fopen("ID_List29.csv", "wb");

    // why does this program only work if there's an UNUSED array of size ~100000 or larger 
    char ArrayThatINeverEvenUsed[10000]; // why does removing zeros cause different outputs?

    int i , j, k , m;
    int sz = 0;
    char c, d, e, f;
    char tStr[8];
    tStr[4] = 0x7C; // pipe separator
    tStr[5] = 0x7C;
    tStr[6] = 0x0D;
    tStr[7] = 0x0A;

    for(i = 65; i < 91; i++)
    {
        c = i;
        tStr[0] = c;
        for(j = 65; j <91; j++)
        {
            d = j;
            tStr[1] = j;
            for(k = 65; k <91; k++)
            {
                e = k;
                tStr[2] = k;
                for(m = 65; m <91; m++)
                {
                    f = m;
                    tStr[3] = m;
                    fprintf(fptr, "%s", &tStr[0]);
                }
            }
        }
    }
puts("Exiting...");
    return 0;
}

1 个答案:

答案 0 :(得分:5)

空终止您的字符串。

char tStr[9]
tStr[8]=0;

否则,您的代码会偶然起作用。

代码工作的原因与未使用的数组增加堆栈并将tStr放置在新分配的页面上,从而将其初始化为零有关,但是这里还有其他问题。无论如何,都会有很多不确定的行为发生。