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)