繁体   English   中英

C中的内存泄漏?

[英]Memory leaks in C?

我目前正在学习用C语言编程。在我的任务中,我必须制作一个直方图(由基本控制台输出绘制,如下所示: http : //img703.imageshack.us/img703/448/histogram .jpg )来测量文本文件中的字符数(此分配的标准大小为1.3 MB)。 我确实做了这样的功能:

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个整数的数组,以使轴成为y。 我找到所有字符的平均值,然后使用控制台的20行显示它。 下方的10行用于显示低于字符总数的平均值,而下方的10行用于显示上部。 下半部分的y轴上的每个步长由(平均值-最小值)/ 10计算,而上半部分的y轴上的每个步长由(max-平均值)/ 10计算。 这是我绘制直方图的方法,因为我想显示值之间的变化。

在main方法中,我有以下函数调用:

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

运行该函数时出现分段错误。 在netbean GCC ++编译器中,它可以正常工作。 但是,当我在大学计算机上运行它(必须在命令行上对其进行编译并在Vi中进行编辑)时,出现了错误。 我猜是因为Netbean拥有自己的内存管理器? 我不明白

编辑:我会问有关合并排序的另一个问题。

* yAxis是一个野指针。 您永远不会为要使用的int数组分配内存。

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

您正在返回什么都没有的指针。

您在函数中的哪个位置告诉计算机为* yAxis保留一些内存?

yAxis是一个点,您没有初始化它。 它会指向未知空间,这取决于编译器。 您应该先为其添加一些内存。

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

不要忘记在调用者中释放它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM