[英]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.