【发布时间】:2014-01-02 16:33:28
【问题描述】:
我正在尝试学习动态内存分配和结构,但我有一些问题。
首先
#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;
}
在这个示例中,我计划它给我错误。因为我将它分配给 1 个整数的大小,所以我写的整数太多了。它不应该给我一个错误吗?可以详细解释一下吗?
struct people
{
char *name;
int age;
char *personalInfo;
} human[3];
当我定义这样的结构时,如何分配它以保持 3 个人以上?如何将其更改为人类 [20] 或更多?如果答案是写 *human 而不是 human[3],我应该如何分配它?喜欢malloc(number*sizeof(char)*sizeof(int)*sizeof(char))?
还有一件事,在第二个示例中,我需要分配 name 和 personalInfo 指针吗?
【问题讨论】:
-
您在第一个示例中调用了 未定义的行为,因此假设 anything 正式不在讨论范围内。
-
注意:DMA 更常用作 Direct Memory Access 的缩写,因此用它来表示动态内存分配很可能会引起混淆。
-
malloc(number*sizeof(char)*sizeof(int)*sizeof(char))-- 不。 想想看。这没有意义。如果您将int和char并排放置,总尺寸会是它们尺寸的乘积吗?当然不会——这将是它们大小的总和,所以malloc(number* (sizeof(char)+sizeof(int)+sizeof(char)))会更有意义。 但是,这仍然是错误和危险的,因为结构可以包含内部填充,所以你最好写sizeof(the_struct_name)。 -
@hyde 感谢您提及这一点。我很困惑。
标签: c malloc dynamic-allocation