c - 此代码(在描述中)如何工作?
问题描述
如果你们看到下面的代码,则没有为ptr分配内存(仅分配 0 个字节)。但是如果没有空间可以初始化 ptr[0],ptr[1].....ptr[n] 。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main(){
int *ptr;
ptr = malloc(0);
ptr[0] = 0;
ptr[1] = 4;
ptr[2] = 3;
printf("%d %d %d",ptr[0],ptr[1],ptr[2]);
}
解决方案
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(void){
float *ptr;
ptr=malloc(2);
float j=0;
for(int i=0;i<1000;i++,j++){
ptr[i]=j;
printf("%f \n",ptr[i]);
}
}
要显示的输出:分段错误;
可能显示的输出:0 1 2......999
但实际输出为:0 1 2.........679
由此我们可以得出结论,malloc 正在分配额外的 660 字节。
在这种情况下,malloc 会从您指定的内容中分配额外的字节。但这并不适用于所有情况。这只是一个例子。malloc 有时会根据环境显示 UNDEFINED BEHAVIOR。
推荐阅读
- laravel - 当 CommandFinished 事件触发时,Laravel 捕获字符串输出
- r - 在 NA 值之后读取带有未指定尾随空格的 csv
- php - php cURL请求后没有来自API的回调
- reactjs - 我应该在哪里以及如何在我的 Create React App 中添加 JSON-LD 模式?
- python-3.x - 如何在 GCP 的作曲家中读取从云函数传递到 Dataproc SparkOperator 的参数
- angular - Angular - 导入 BrowserAnimationsModule 和 NoopAnimationsModule 并决定在运行时使用什么(使用 AOT)
- sql - 从 SQL Server 表中查找和删除重复行
- javascript - 来自响应数据的 javascript 映射
- python - 慢熊猫索引查找唯一索引
- python - 当我有“下一个”网址时,如何禁用网址重定向?- 姜戈