Почему C не может запустить эту программу для больших размеров массива? - PullRequest
0 голосов
/ 20 июня 2011

Когда я запускаю эту программу для больших массивов (например, 100000), появляется следующая ошибка: «Общая защита» и запуск остановлены в строке 8 (то есть c [i] = 0;). Интересно, поможете ли вы мне в «Как я должен изменить следующую программу, чтобы запустить»?

#include <stdlib.h>
float *c;
void main()
{
long i;
c=(float*) malloc (sizeof(float*)*100000);
for (i=0;i<100000;i++)
    c[i]=0;
}

Ответы [ 4 ]

4 голосов
/ 20 июня 2011

Попробуйте это:

int main(){ 
  float *c = malloc(sizeof(float) * 100000);
  for (int i=0; i<100000; i++)
    c[i]=0;

  return 0;
}

Редактировать: здесь я использую некоторые функции C99 и запускаю только для компиляторов, которые рассматривают int как 32-битные или 64-битные. Это должно работать с gcc в Linux или Mac OS X.

2 голосов
/ 20 июня 2011

Я думаю, что вы используете 16-битный компилятор, и malloc не может выделить столько памяти в одном непрерывном блоке.

Я только что заметил, что вы используете long в качествепеременная цикла, а не более часто используемый int, который еще раз подтверждает мое дикое предположение.

2 голосов
/ 20 июня 2011

Это должно быть:

c=(float*) malloc (sizeof(float)*100000);
0 голосов
/ 20 июня 2011

float c;

Это число с плавающей точкой, а не массив.Вы, вероятно, имеете в виду:

float *c;

c = (float) malloc (sizeof (float *) * 100000);

Это попытка привести массивплавает как поплавок.Опять же, вы, вероятно, имеете в виду:

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