gpt4 book ai didi

c - K&R atoi-一般内存泄漏

转载 作者:行者123 更新时间:2023-12-04 12:01:30 25 4
gpt4 key购买 nike

我正在按照 K&R 第二版示例学习 C 和编码,因为我认为这是正确的做事方式。无论如何,当我在编译后运行这个程序时,程序卡住了。我使用 valgrind 来执行编译后的脚本。

#include <ctype.h>

int atoi(char s[])
{
int i, n, sign;
for(i = 0; isspace(s[i]); i++)
;
sign = (s[i] == '-')? -1 : 1;
if (s[i] == '+'|| s[i] == '-')
i++;
for (int n = 0; isdigit(s[i]); n++)
n = 10 * n + (s[i]-'0');
return sign * n;
}

int main()
{
char input[] = " -12345";
atoi(input);
}
# vaibhavchauhan at startup001 in ~/Documents/Projects/K-R on git:master x [0:43:36]
$ valgrind ./atoi-general
==8075== Memcheck, a memory error detector
==8075== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==8075== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==8075== Command: ./atoi-general
==8075==
^C==8075==

最佳答案

在你的第二个循环中,你正在迭代 n 但你使用 i 进行计算和计算。这导致您观察到无限循环。要解决此问题,请始终使用 i 作为索引:

int atoi(char s[])
{
int i, sign, n;
for(i = 0; isspace(s[i]); i++)
;
sign = (s[i] == '-')? -1 : 1;
if (s[i] == '+'|| s[i] == '-')
i++;
for (n = 0; isdigit(s[i]); i++)
n = 10 * n + (s[i]-'0');
return sign * n;
}

请注意,索引的类型应该是 size_t,而不是 int,因为后者可能不够大,无法索引每个数组。为此,int 类型的索引就可以了。

关于c - K&R atoi-一般内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35219839/

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