【发布时间】:2015-10-15 22:42:55
【问题描述】:
我是 c 编程新手。我需要一个 (10^5)*(10^5) 矩阵,在其中定义一个圆形边界。边界内的矩阵条目将是 1 和外 0。为了检查,我从 (1000*1000) 开始并打印如果我不使用free(ar) 语句,则整个矩阵。当我使用(11*11) 矩阵并相应地更改圆形边界并通过打印第一行检查free(ar)'s 动作时,它会显示以前的条目。我使用的是Windows 64位机和代码::blocks 13.12 IDE。这是我的 (11*11) 矩阵代码:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<conio.h>
#include<time.h>
#define NULL ((void *)0)
main()
{
int i,j,n,k,*ar;
float p;
printf("Enter n::::");
scanf("%d",&n);
ar=(int*)calloc((n*n),sizeof(int));
if(ar==NULL)
{
printf("Memory allocation error");
exit(1);
}
printf("\nThe matrix is::\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
p=((i-5)*(i-5)+(j-5)*(j-5));
if(p<16)
{
ar[i*n+j]=0;
printf("%d",ar[i*n+j]);
}
else
{
ar[i*n+j]=1;
printf("%d",ar[i*n+j]);
}
}
printf("\n");
}
printf("\nPRINTING COMPLETE\n");
free(ar-(n*n));
printf("\nThe first row of the matrix is\n\n");
for(k=0;k<11;k++)
{
printf("%d\t",*(ar+k));
}
}
输出是:
Enter n::::11
The matrix is::
11111111111
11111111111
11100000111
11000000011
11000000011
11000000011
11000000011
11000000011
11100000111
11111111111
11111111111
PRINTING COMPLETE
The first row of the matrix is
1 1 1 1 1 1 1 1
1 1 1
【问题讨论】:
-
这不清楚。您的问题有什么症状?
-
@Beman “我无法释放内存”不够具体。无论如何,
free被注释掉了,所以它不可能释放任何东西。 -
@Beman:没有“解决方案”。调用
free后读取或写入内存是错误的。不要那样做,你的代码坏了。 -
你会写出 1000 次“我释放内存后不能访问内存,因为这样做是未定义的行为”。