c - C 中 malloc 的工作原理

标签 c malloc realloc

我是 C 初学者。我想知道 malloc 是如何工作的。 这是一个示例代码,我在尝试理解它的工作原理时编写的。

代码:

#include<stdio.h>
#include<stdlib.h>
int main() {
  int i;
  int *array = malloc(sizeof *array);
  for (i = 0; i < 5; i++) {
    array[i] = i+1;
  }
  printf("\nArray is: \n");
  for (i = 0; i < 5; i++) {
    printf("%d ", array[i]);
  }
  free(array);
  return 0;
}

输出:

Array is: 
1 2 3 4 5

在上面的程序中,我只为 1 个元素分配了空间,但数组现在包含 5 个元素。那么既然程序运行顺利,没有任何错误,那么realloc()的用途是什么呢?

谁能解释一下为什么吗?

提前致谢。

最佳答案

程序运行顺利并不意味着它是正确的! 尝试将 for 循环中的 5 增加到一定程度(例如,500000 就足够了)。在某些时候,它会停止工作,并给您一个 SEGFAULT

这称为未定义行为。

valgrind 还会警告您有关此问题的信息,如下所示。

==16812== Invalid write of size 4
==16812==    at 0x40065E: main (test.cpp:27)

关于c - C 中 malloc 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44985721/

相关文章:

c - 带有退出值宏的 perror

C - 将 kbhit 中的 key 写入文件会使程序崩溃

c++ - 使用 tcmalloc - 如何正确加载 malloc 扩展?

linux - malloc 是否会为 Linux(和其他平台)上的分配懒惰地创建支持页面?

c++ - C++/ActiveX用malloc,memcpy,free替换了realloc。功能和性能测试

c - Struct realloc 内的动态字符串数组

c - #define 多行字符串

c - 来自管道的固定大小记录的多个读取器

c - malloc() 和固定大小的简单声明之间的区别

c - Realloc 无法将 1 动态增长到超过一百万个元素