为什么我的C ++代码在stdout上得到响应?

时间:2019-05-11 08:14:31

标签: c++

我正在尝试解决Hackerrank Find Digits问题,并收到涉及数组问题的运行时错误。我尝试释放阵列内存空间,但是仍然相同。我要进行哪些更改?

我尝试通过常规方式以及使用malloc函数声明数组。

#include <bits/stdc++.h>
using namespace std;
int main() {
int testCase,rem,count[]={0},n;
scanf("%d", &testCase);
int *numbers = (int*) malloc(testCase*sizeof(int));
for(int i=0; i<testCase; i++) 
    scanf("%d",numbers + i);
for(int i=0; i<testCase; i++) {
    n = *(numbers + i);
    while(n!=0) {
        int q = n % 10;      //get the units place
        rem = *(numbers + i) % q;         //find remainder
        if(rem == 0)
            count[i]++;
        n/=10;
    }
}
free(numbers);
for(int i=0; i<testCase; i++)
    printf("%d", count[i]);
free(count);
 return 0;
}

2 个答案:

答案 0 :(得分:1)

从注释中可以注意到,count数组从一开始就隐式设置为仅包含1个元素。此外,这不是导致您出现运行时错误的唯一问题。

如果使用算子模数(%),则必须确保不除以零,否则将得到浮点异常-rem = *(numbers + i) % q;

我还建议您使用C ++或C,因为您将两者结合在了代码中,并且认为这是不切实际的

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {
    int testCase,rem,n;
    scanf("%d", &testCase);
    int *numbers = (int*) malloc(testCase*sizeof(int));
    int *count= (int*) malloc(testCase*sizeof(int));
    for(int i=0; i<testCase; i++) {
        scanf("%d",numbers + i);
        count[i] = 0;
    }
    for(int i=0; i<testCase; i++) {
        n = *(numbers + i);
        while(n!=0) {
            int q = n % 10;      //get the units place
            if (q == 0) {
                n /= 10;
                continue;
            }

            rem = *(numbers + i) % q;         //find remainder
            if(rem == 0)
                count[i]++;
            n/=10;
        }
    }
    free(numbers);
    for(int i=0; i<testCase; i++)
        printf("%d", count[i]);
    free(count);

    return 0;
}

答案 1 :(得分:0)

//我没有更正代码以打印适当的计数。我刚刚建议了为什么会出现运行时错误

当使用malloc / realloc分配内存时,应使用

free

内存尚未分配为动态计数,因此请勿使用free(count)。

也不需要在第一行中使用该标头。下面的PFB代码

#include <stdio.h>
int main() {
int testCase,rem,count[]={0},n;
scanf("%d", &testCase);
int *numbers = (int*) malloc(testCase*sizeof(int));

for(int i=0; i<testCase; i++) 
    scanf("%d",(numbers+i));
for(int i=0; i<testCase; i++) 
    printf("%d\n",numbers[i]);

for(int i=0; i<testCase; i++) {
    n = *(numbers + i);
    while(n!=0) {
        int q = n % 10;      //get the units place
        rem = *(numbers + i) % q;         //find remainder
        if(rem == 0)
            count[i]++;
        n/=10;
    }
}
free(numbers);
for(int i=0; i<testCase; i++)
    printf("%d", count[i]);
 return 0;
}