Я получаю значение мусора при попытке найти сумму массива - PullRequest
0 голосов
/ 01 марта 2019

Я попытался определить большое число с помощью #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 голосов
/ 01 марта 2019

Как сказано в предыдущем ответе ^ - это оператор XOR.Я предполагаю, что ваше намерение состоит в том, чтобы выделить память на 10 степеней 10 чисел.Физически невозможно выделить такую ​​огромную память.Попробуйте что-то вроде

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

Это может сработать:)

0 голосов
/ 01 марта 2019

^ - побитовый оператор XOR.Результат operator^ является побитовым значением XOR операндов.

10^10 * sizeof(int) равно 10^ (10*4) из-за правил приоритета и приведет к выделению 34 байтов.

И если значение n больше 8, вы получите доступ кпамять, которая выходит за пределы вашей программы в следующем выражении:

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

Чтобы избежать этого, вы можете сначала прочитать в n, а затем использовать malloc следующим образом:

malloc(n * sizeof(int))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...