C中数组的动态内存分配

Mr *_*rno 3 c memory arrays malloc dynamic

所以我正在尝试使用malloc在C中创建一个动态数组,但由于某种原因它没有用完.这是我的代码:

    int* test = (int*) malloc(20 * sizeof(int));
    printf("Size: %d\n", sizeof(test));
Run Code Online (Sandbox Code Playgroud)

当我运行这段代码时,控制台输出8,尽管理想情况下它应该输出80,我相信,因为int的大小是4,而我正在创建20个.那么为什么这不起作用呢?谢谢你的帮助.:)

Cha*_*via 8

sizeof运营商正在返回的大小int*,这仅仅是一个指针.在C中,当您使用动态分配内存时malloc,调用malloc返回指向新分配的内存块的指针(通常在堆上).指针本身只是一个内存地址(通常在大多数情况下只占用4或8个字节)现代系统).您需要跟踪自己分配的实际字节数.

C语言只跟踪静态分配的缓冲区(堆栈数组)的缓冲区大小,因为数组的大小在编译时可用.

int test[100];
printf("Sizeof %d\n", sizeof(test))
Run Code Online (Sandbox Code Playgroud)

这将打印一个等于100 * sizeof(int)(在大多数现代机器上通常为400)的值

  • @Mr Cherno,你无法使用标准ANSI-C获得它.您必须使用单独的变量自行跟踪它.(你知道你分配了一个等于`20*sizeof(int)`大小的缓冲区). (2认同)