您好,我制作了一个测试程序,以便在以下代码上使用valgrind --track-origins=yes -v ./a.out时获得有关如何解决问题的帮助,它会返回以下错误;

==13192== 1 errors in context 1 of 1:
==13192== Conditional jump or move depends on uninitialised value(s)
==13192==    at 0x4E6CEA6: ____strtol_l_internal (strtol_l.c:438)
==13192==    by 0x4005EB: main (in Desktop/a.out)
==13192==  Uninitialised value was created by a stack allocation
==13192==    at 0x40057D: main (in Desktop/a.out)


这是我的测试程序代码。

char newid[2];
char copyfromid[5] = "12345";

char *test, *extra;
int j, i = 0;

int outputNum;

for (j = 3; j < 5; j++) {
    newid[i] = copyfromid[j];
    i++;
}
test = newid;
outputNum = strtol(test, &extra, 10);
printf("%d", outputNum);


这只是一个测试程序,可以将copyfromid中的最后两个字符转换为正在进行中的较大项目的数字,任何帮助都将非常有用,谢谢。

最佳答案

  for (j=3;j<5;j++){
        newid[i] = copyfromid[j];
        i++;
    }
newid [i] =0;


您未添加尾随零,并且newid必须至少为3个字符长

关于c - 使用strtol的内存错误未初始化的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46371147/

10-12 16:29