无法释放C指针



过去几周我一直在Linux Mint中学习C语言。但是,我切换到OSX并正在测试以下代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int *arr = calloc(10, sizeof(int));
  if(arr == NULL)
    printf("arr is null");
  for(int i = 0; i < 10; i++, arr++){
    printf("%d n", *arr);
  }

  free(arr);
  return 0;
}

这应该可以工作并打印10个零,它确实这样做了,但它没有释放arr。

输出:

0 
0 
0 
0 
0 
0 
0 
0 
0 
0 
a.out(532,0x7fff72606300) malloc: *** error for object 0x7ff060c04b48: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

我不明白我怎么能访问没有分配的内存。如果没有分配arr,输出不应该是"arr为空"吗?

您的程序将arr增加10倍。传递给free的指针与从calloc接收到的指针不同。您需要传递原始地址,预递增

相关内容

  • 没有找到相关文章

最新更新