Почему я получаю segfault при назначении массива - PullRequest
0 голосов
/ 22 сентября 2019

Я получил N более 1 миллиона и выделил память для массивов.Но затем я пытаюсь присвоить значения элементам массива, точно на i == 263164 Я получил ошибку сегментации.Что здесь не так?

int N = 1<<20;
float *x, *y;
x = (float *)malloc(N);
y = (float *)malloc(N);
for (int i = 0; i < N; i++) {
    x[i] = 1.0f;
    y[i] = 2.0f;
}

1 Ответ

0 голосов
/ 22 сентября 2019

При вызове (float *)malloc(N) я выделил N байтов и возвращаю указатель на это распределение.Когда я пытаюсь записать N с плавающей точкой в ​​этот массив, я получаю ошибку сегментации, потому что N с плавающей точкой не может уместиться в N байтов.Вместо этого я должен выделить память следующим образом (float *)malloc(N*sizeof(float))

...