- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我很好奇在使用malloc()
分配内存空间后,指针究竟持有什么?联机帮助页告诉我 calloc()
将分配的内存空间初始化为零。
The malloc() function allocates size bytes and returns a pointer to the allocated memory. The memory is not initialized. If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully passed to free().
和
The calloc() function allocates memory for an array of nmemb elements of size bytes each and returns a pointer to the allocated memory. The memory is set to zero. If nmemb or size is 0, then calloc() returns either NULL, or a unique pointer value that can later be successfully passed to free().
我用 C 创建了一个非常短的示例程序,为自己编写了 C(哈哈):
int main() {
char *dynamic_chars;
unsigned amount;
printf("how much bytes you want to allocate?\n");
scanf("%d", &amount);
dynamic_chars = (char*)malloc(amount*sizeof(char));
printf("allocated:\n%s\n", dynamic_chars);
free(dynamic_chars);
return 0;
然而,当执行这段代码时,它什么也没有输出。如果我自己初始化内存,例如使用循环用 0xFFFF
初始化每个字节,那么程序会准确地显示我所期望的。内存空间实际上存在,因为我不会收到声称我正在尝试访问未初始化变量等的错误。
由于内存空间通常不会被删除但被标记为可重写我想知道是否通过执行我的程序,我是否应该能够看到随机的以前使用的内存字节?但是我什么也看不到,所以我真的很困惑 malloc()
究竟是如何工作的。
关于 malloc()
或者一般内存使用的另一件事,对我的程序很有趣:如果我使用 calloc()
来分配内存,我可以跟踪程序的实际内存使用情况,例如监控它。例如,如果我告诉我的程序,为每个 calloc()
分配 1.000.000.000 字节的内存,我将在系统监视器中看到以下内容:
正如您可能想象的那样,在使用 malloc()
时,我什么也看不到。我明白,只是通过分配内存,我当时并没有真正使用它,但我仍然对为什么我的操作系统(unix derivate)不会识别它被使用感到困惑。由于 malloc()
就像 calloc()
将物理地址返回到我没有得到的内存位置,这个内存区域似乎并没有被操作系统保留.否则我可以在系统监视器中看到它吗?如果我宁愿将此作为一个新问题发布,请告诉我。但我认为,既然问题仍然是关于 malloc()
是如何工作的,那么它就适合放在这里。
最佳答案
不,malloc()
返回未初始化的内存,其内容是不确定的。因此,尝试使用 值调用 undefined behavior .
引用 C11
,附件 §J.2,未定义的行为
The value of the object allocated by the
malloc
function is used
在这种情况下,%s
需要一个以 null 结尾的 char
数组。然而,dynamic_chars
的内容是不确定的,因此很可能根本没有空终止符,这将导致越界内存访问,进而调用 UB。
引用 C11
,章节 §7.22.3.5,malloc
函数(强调我的):
The
malloc
function allocates space for an object whose size is specified bysize
and whose value is indeterminate.
也就是说,please see this discussion on why not to cast the return value of malloc()
and family in C
. .
关于c - `malloc()`刚刚分配的内存内容是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37184733/
实现信息技术的自主可控,可以说是金融行业最紧迫、最重要的推进战略了。 人民银行、银保监会等主管部门密集出台文件,指导金融行业核心领域自主可控技术应用。 拿数据库来说,自主可控这事儿业内也
在methods中创建方法showtime,传入要跟当前时间要对比的时间 ?
其实这个没什么技术含量,当然就直接贴代码,不废话了, 但是在其实开发中还是蛮有用的,譬如论坛帖子,围脖等都有相关应用 复制代码代码如下: function tranTim
今天,杭州人的朋友圈都被这场晚会刷屏了 分散在全球的阿里人都回到杭州,为阿里巴巴送上20周岁的生日祝福。 阿里巴巴20周年年会,被称作“有史以来杭州规模最大的年会”,没有
在很多场合为了显示出信息的及时性,一般会将时间显示成“刚刚”,“5分钟前”,“3小时前”等,而不是直接将时间打印出来。比如微博,SNS类应用就最长用到这个功能。而一般存储在数据库中的时间格式为 Un
我是一名优秀的程序员,十分优秀!