首页 > 解决方案 > 此代码(在描述中)如何工作?

问题描述

如果你们看到下面的代码,则没有为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]);
}

标签: cmallocdynamic-memory-allocationcalloc

解决方案


#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。


推荐阅读