gpt4 book ai didi

c - int var 得到奇怪的值

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:24 25 4
gpt4 key购买 nike

当我一直尝试调试它时,Int 值“j”得到了奇怪的结果。我不确定这是我学校编译器的问题还是我的代码。谢谢您的帮助。

海湾合作委员会版本:从/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/specs 读取规范gcc 版本 2.95.2 19991024(发布)

我的代码段搞砸了:

    void sFlag(DIR * dirp, int c, char *dirname)
{
struct dirent *dp;
struct stat statbuf;
struct stat statarray[c];
struct stat tempstat;
char fullfilename[MAXSZ];
int i;
int boo;
int j; /*<--------- variable that's messing up*/

while((dp = readdir(dirp)) != NULL)
{
snprintf(fullfilename, MAXSZ, "%s/%s", dirname, dp->d_name);
if(stat(fullfilename, &statbuf) == -1)
printf("Could not read file %s\n", dp->d_name);
else if(isHiddenFile(dp->d_name))
{
statarray[i] = statbuf;
i++;
}
}
/*As far as i know all the code above works fine*/

/*bubble sort that will sort array by logical file size*/
while(boo)
{
j = 0;
boo = 0;
while(j < c)
{
fprintf(stderr, "%d\n", j); /*print debug info*/
if(statarray[j].st_size < statarray[j+1].st_size)
{
tempstat = statarray[j];
statarray[j] = statarray[j+1];
statarray[j+1] = tempstat;
boo = 1;
}
j++;
}
}
for(j = 0; j < c; j++)
{
printf("%s\t%ld\t%s\n", dp->d_name, statarray[j].st_size, ctime(&statarray[j].st_mtime));
}
}

所以每次我运行它时,fprintf 都会打印出 j 的值:01个2个3个4个-12975991????????它从哪里得到这个数字???显然我从数组索引越界得到了一个段错误

有什么想法吗?

最佳答案

您很可能正在践踏内存并覆盖j 的内容。这个循环:

        while(j < c)
{
fprintf(stderr, "%d\n", j); /*print debug info*/
if(statarray[j].st_size < statarray[j+1].st_size)
{
tempstat = statarray[j];
statarray[j] = statarray[j+1];
statarray[j+1] = tempstat;
boo = 1;
}
j++;
}

注意它访问了statarray[j+1],但是statarray被定义为

    struct stat statarray[c];

表示在最后一次迭代中,j+1 == c,这是越界的。写入数组中的该索引将破坏堆栈中的其他内容,其中可能包括 j,并解释为什么您会得到一个听起来古怪的值。

有一些漂亮的工具可以使您更容易找到您可能会考虑的东西,例如 valgrind

关于c - int var 得到奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23436146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com