使用scanf / cin时,程序在调试模式下工作正常,但会产生运行时错误

时间:2013-12-21 06:02:53

标签: runtime-error scanf

我正在尝试接受以下输入:

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.

1 个答案:

答案 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