c - 这段代码(在描述中)如何工作?

标签 c malloc dynamic-memory-allocation calloc

如果你们看到下面的代码,则说明没有为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,具体取决于环境。

关于c - 这段代码(在描述中)如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819632/

相关文章:

c++ - 错误: ‘calloc’ was not declared in this scope

Windows内存分配问题

c++ - 虚函数如何工作以及分配时新返回类型会发生什么?

c - 在 C 中打印 3d 数组中的 2d 部分(段错误)

c - 应该在每次 fclose 之后使用 fsync 吗?

c - 如何在 C 上更改字符串中的单个字符?

c - 当两个或多个线程或进程 ftruncate(2) 同一个文件时会发生什么?

c - Activity 选择

c - 当我没有使用 malloc() 分配足够的内存时,为什么我的代码可以工作?

c - 结构内的动态内存