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个.那么为什么这不起作用呢?谢谢你的帮助.:)
该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)的值
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |