Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
free()可以';t在我的c代码中释放动态分配的内存_C_Algorithm_Matrix - Fatal编程技术网

free()可以';t在我的c代码中释放动态分配的内存

free()可以';t在我的c代码中释放动态分配的内存,c,algorithm,matrix,C,Algorithm,Matrix,我是c编程新手。我需要一个(10^5)*(10^5)矩阵,在该矩阵中我定义了一个循环边界。边界内的矩阵条目将是1,外部为0。为了进行检查,我从(1000*1000)开始,如果我不使用free(ar)语句,它将打印整个矩阵。当我使用(11*11)matrix,并相应地更改圆形边界,通过打印第一行来检查free(ar)操作,它显示以前的条目。我使用的是windows 64位计算机,代码::blocks 13.12 IDE。这是我的(11*11)matrix代码: 因此,在freeing之后访问ar,

我是c编程新手。我需要一个
(10^5)*(10^5)
矩阵,在该矩阵中我定义了一个循环边界。边界内的矩阵条目将是1,外部为0。为了进行检查,我从
(1000*1000)
开始,如果我不使用
free(ar)
语句,它将打印整个矩阵。当我使用
(11*11)
matrix,并相应地更改圆形边界,通过打印第一行来检查
free(ar)
操作,它显示以前的条目。我使用的是windows 64位计算机,代码::blocks 13.12 IDE。这是我的(11*11)matrix代码:

因此,在
free
ing之后访问
ar
,会导致未定义的行为。因此,如果您不想在释放后访问它,请在释放后将其分配到
NULL
(这是一个很好的做法)


因此,如果您试图访问它,您的程序将崩溃,这样您就知道发生了错误。

这还不清楚。你问题的症状是什么?@Beman“我无法释放内存”不够具体。无论如何,
free
被注释掉了,所以它不可能释放任何东西。可能重复@Beman:没有“解决方案”。调用
free
后读取或写入内存是错误的。不要这样做,您的代码已被破坏。您将写出1000次“在释放内存后,我不能访问内存,因为这样做是未定义的行为”。我想说,free(ar)并没有释放内存。如果您看到编辑过的问题,我在释放后打印了第一行,这给出了我以前的矩阵条目,如果我以相同的方式打印其他行,也会得到相同的结果。所以内存不是由free(ar-(n*n))语句清理的。@Beman您看到前两个值不是n
ar
。这些值可以是任何值。请注意您的输出。您正在调用未定义的行为,因此它可以打印任何内容。
    #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
  free(ar);  
  free(ar);
  ar=NULL;