我正在尝试接受以下输入:
1
4
47 2 4 43577
我的代码部分是:
for (scanf("%d", &t); t --; )
{
int count = 0;
scanf("%d",&n);
for (int i = 0, x; i < n; ++ i)
{
scanf("%d",&x);
str = to_string(x);
f4[i] = get_count(str,'4');
f7[i] = get_count(str,'7');
}
然而,有了这个,我得到一个运行时错误,它显示了free.c文件中的访问冲突。
但是,当我尝试调试它时,它在调试模式下运行良好并给出了正确的答案。
此外,当我输入变量 x 后,程序也可以在运行时运行良好。这在以下代码中显示,它在运行时也运行良好:
for (scanf("%d", &t); t --; )
{
int count = 0;
scanf("%d",&n);
for (int i = 0, x; i < n; ++ i)
{
scanf("%d",&x);
cout<<"A"<<i<<" is "<<x<<'\n';
str = to_string(x);
f4[i] = get_count(str,'4');
f7[i] = get_count(str,'7');
}
知道为什么会这样吗?
一些stackoverflow用户说代码运行正常。我正在使用VS 2012.这可能是编译器特定的吗?
完整的代码:
#include<iostream>
#include<conio.h>
#include<string>
#include<math.h>
using namespace std;
int get_count(string s, char x)
{
int count = 0;
int l = s.length();
for(int i = 0; i < l;i++)
{
if (s[i] == x)
count++;
}
return count;
}
void main()
{
int * f4 = new int;
int * f7 = new int;
string * back = new string;
int n = 0;
int t = 0;
string str;
for (scanf("%d", &t); t --; )
{
int count = 0;
scanf("%d",&n);
for (int i = 0, x; i < n; ++ i)
{
scanf("%d",&x);
str = to_string(x);
f4[i] = get_count(str,'4');
f7[i] = get_count(str,'7');
}
for(int i = 0;i < n;i++)
{
for(int j = i; j < n;j++)
{
int c4 = 0;
int c7 = 0;
for(int k = i; k <= j;k++)
{
c4 += f4[k];
c7 += f7[k];
}
double value = pow((double)c4,(double)c7);
if(value <= (double)(j - i + 1)&&(c4!=2)&&(c7!=2))
{
count++;
//cout<<"yes"<<'\t';
}
}
}
cout<<"Ans: "<<count<<'\n';
}
//getch();
}
除了此代码中的那些之外,没有其他变量赋值。
我在运行时得到的确切错误是:
Unhandled exception at 0x7794E3BE (ntdll.dll) in Practice1.exe: 0xC0000005: Access violation reading location 0x38389246.
答案 0 :(得分:0)
您没有包含&#34; get_count&#34;功能。我认为它与该功能有关。我重写了这个函数来返回一些数字而我没有得到那个错误。尝试断言您没有尝试在该函数中使用空指针。 在我的机器上正常工作: 这是我改变的内容
for (int i = 0, x; i < n; ++ i)
{
scanf("%d",&x);
stringstream ss;
ss << x;
str = ss.str();
f4[i] = get_count(str,'4');
f7[i] = get_count(str,'7');
}
输出:
1
4
47 2 4 43577
Ans: 5