试图在C中学习动态内存分配

oss*_*uko 1 c malloc dynamic-allocation

我正在尝试学习动态内存分配和结构,我有一些问题.

首先

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int *number;
    number = malloc(1*sizeof(int));
    int a;
    for(a=0;a<150;a++)
    {
        number[a]=a;
        printf("%d ",number[a]);
    }
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

在这个样本中,我计划给它错误.因为我将它分配给1个整数的大小,然后我写了太多的整数.它不应该给我一个错误吗?你能详细解释一下吗?

struct people 
{
    char *name;
    int age;
    char *personalInfo;
} human[3];
Run Code Online (Sandbox Code Playgroud)

当我定义这样的结构时,如何分配它以保持超过3个人?如何将其更改为人类[20]或更多?如果答案是写人而不是人[3],我应该如何分配?喜欢malloc(number*sizeof(char)*sizeof(int)*sizeof(char))?

还有一件事,在第二个例子中,我需要分配名称和个人信息指针吗?

小智 5

在这个样本中,我计划给它错误.

你不能"计划给出错误".你说代码是错的是正确的,因为你写的是数组的末尾,但C没有边界检查 - 访问数组只是未定义的行为,这意味着它可以做任何事情 - 它可以假装工作正常或可能会崩溃,或者它可能导致恶魔飞出你的鼻子.

如何将其更改为人类[20]或更多?

嗯......这正是如此:

struct people {
   // members here
} human[20];
Run Code Online (Sandbox Code Playgroud)

我不明白为什么数字"3"如此特别.如果要动态分配内存,则可以按照每种其他数据类型的方式进行sizeof操作:使用运算符:

struct people *human = malloc(sizeof(human[0]) * number_of_people);
Run Code Online (Sandbox Code Playgroud)

要么

struct people *human = malloc(sizeof(struct people) * number_of_people);
Run Code Online (Sandbox Code Playgroud)

  • @WilliamPursell:计算机可能是制药厂内的嵌入式设备......因此它可能对鼻窦造成真正的损害(通过一些不受控制的危险物质释放). (2认同)