Утечки памяти в C? - PullRequest
       1

Утечки памяти в C?

1 голос
/ 18 ноября 2010

В настоящее время я учусь программировать на C. В одной из задач в моем задании я должен составить гистограмму (нарисованную на основе основного вывода консоли, например: http://img703.imageshack.us/img703/448/histogram.jpg), чтобы измерить количество символовв текстовом файле (стандартное для этого назначения - 1,3 МБ). Я сделал такую ​​функцию:

int *yAxisAverageMethod(int average, int max, int min)
{
    int *yAxis;
    int i=0;
    for (i=0;i<20;i++)
    {
        *(yAxis+i)=0;
    }
/*
    int length=sizeof(data)/sizeof(int);
*/
    int lower_half_interval=average/10;
    int upper_half_interval=(max-average)/10;
    int current_y_value=min;
        for (i=0;i<11;i++)
        {
            if (i==10){
                *(yAxis+10)=average;
                break;
            }
            *(yAxis+i)=current_y_value;
            current_y_value+=lower_half_interval;            
        }
    current_y_value+=average+upper_half_interval;
    printf("Current y value:%d\n",current_y_value);
    printf("Current max value:%d\n",max);
        for (i=11;i<20;i++)
        {
                *(yAxis+i)=current_y_value;
                current_y_value+=upper_half_interval;
        }

    return yAxis;
}

В этой функции я собираюсь вернуть массив из 20 целых чисел, чтобы сделатьось. Я нахожу среднее значение всех символов, затем использовал 20 строк консоли, чтобы отобразить его. Нижние 10 строк используются для отображения значений ниже среднего значения общего количества символов, а 10 строк используются для отображения верхнейЧасть. Каждый шаг по оси Y нижней половины рассчитывается как (среднее значение - мин) / 10, а каждый шаг по оси Y верхней части рассчитывается по (максимум - среднее значение) / 10. Это мой методНарисуйте гистограмму, потому что я хочу отобразить варианты между значениями.

В основном методе у меня есть вызов этой функции:

int *yAxis;
yAxis=yAxisAverageMethod(average,max,min);

Я получил fau сегментацииЭто когда я запустил функцию.В компиляторе GCC ++ netbean работает нормально.Однако, когда я запустил его на университетских машинах (которые мне нужно скомпилировать в командной строке и отредактировать в Vi), я получил ошибку.Я думаю, это потому, что у Netbean есть собственный менеджер памяти?Я не понимаю.

Отредактировано: я задам вопрос о сортировке слиянием в другом вопросе.

Ответы [ 4 ]

2 голосов
/ 18 ноября 2010

* yAxis - это дикий указатель. Вы никогда не выделяете память для массива int, который хотите использовать.

int *yAxis = malloc(sizeof(int) * 20);
1 голос
/ 18 ноября 2010

Вы возвращаете указатель на ничто.

Где внутри функции вы говорите компьютеру зарезервировать немного памяти для * yAxis?

0 голосов
/ 18 ноября 2010

Не забудьте освободить () его в вызывающем абоненте.

0 голосов
/ 18 ноября 2010

yAxis - это точка, и вы ее не инициализировали. он будет указывать на неизвестное пространство, что зависит от компилятора. Вы должны применить немного памяти для этого в первую очередь.

yAxis = malloc(sizeof(int)*20);

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