为什么我在C 代码的Stdout上得到响应

Why am I getting a response on stdout for my C++ code?

本文关键字:响应 Stdout 代码 为什么      更新时间:2023-10-16

我正在尝试求解hackerrank查找数字问题并收到涉及数组的问题的运行时错误。我尝试释放数组内存空间,但仍然相同。我要做什么更改?

我尝试通过使用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;
}

您可能会从注释中注意到,您的 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;
}

//我尚未校正代码以打印适当的计数。我刚刚建议您为什么会遇到运行时错误

使用malloc/realloc

分配内存时应使用免费

记忆尚未分配为动态计数,因此请勿使用免费(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("%dn",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;
}