尝试查找数组总和时出现垃圾值

时间:2019-03-01 06:48:26

标签: c

我尝试通过#define定义大量数字,但这没有用。

int main() 
{   
    long *N;
    N = (long *)malloc(10^10 * sizeof(int));
    int n = 0, sum = 0;
    scanf("%d", &n);
    //long N = 10 ^ 10;
    //int size[N];
    for (int i = 0; i < n; i++) {
        scanf("%lu",(N + i));
        sum = sum + *(N+i);
    }
    printf("%d", sum);

    free(N);
    return (0);
}

2 个答案:

答案 0 :(得分:2)

^是按位XOR运算符。 operator^的结果是操作数的按位XOR值。

10^10 * sizeof(int)10^ (10*4),因为存在优先级规则,将导致分配34个字节。

如果n的值大于8,您将在以下语句中最终访问超出程序范围的内存。

scanf("%lu",(N + i));

为避免这种情况,您可以先读入n,然后像这样使用malloc

malloc(n * sizeof(int))

答案 1 :(得分:0)

如上一个答案中所述,^是XOR运算符。我想您的意图是为10的幂分配10个整数的内存。在物理上不可能分配这么大的内存。尝试类似

N =(long *)malloc(1000 * sizeof(long));

这可能有效:)