在C中使用malloc

bha*_*waj -3 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;
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

Array is: 
1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

在上面的程序中,我只为1个元素分配了空间,但是数组现在包含5个元素.因此,当程序顺利运行而没有任何错误时,目的是什么realloc().

谁有人解释原因?

提前致谢.

Dav*_*aro 6

程序运行顺利并不意味着它是正确的!尝试5在某种程度上增加for循环(500000例如,应该足够).在某些时候,它会停止工作给你一个SEGFAULT.

这称为未定义行为.

valgrind 也会用类似下面的内容警告你这个问题.

==16812== Invalid write of size 4
==16812==    at 0x40065E: main (test.cpp:27)
Run Code Online (Sandbox Code Playgroud)