【发布时间】:2014-02-06 22:55:11
【问题描述】:
#include <stdlib.h>
#include <stdio.h>
#define MAX_NUM 65536
struct Test{
int t;
char args[16][65];
};
int main(int argc, char ** argv) {
//
struct Test *array = malloc(MAX_NUM * sizeof(struct Test*));
printf("%d", sizeof(*array));
for(int i = 0; i < sizeof(*array); i++) {
printf("%d", i);
printf(" ");
array[i].t = 0;
}
array[421].t = 5;
printf("%d", array[421].t);
free(array);
return 0;
}
您好,我如何确定分配后的数组有多少个插槽?当我打印 sizeof(*array) 时,我得到数字 1044,但是当我尝试运行循环并在每个插槽中设置一个测试值时,我在段错误之前只能达到 282。 sizeof 和 malloc 有什么区别?为什么我的数组在大小为 1044 时只接受高达 282 的值?为什么我可以在 421 处编辑一个插槽,但在我的循环中它的段错误高达 282?谢谢
【问题讨论】:
-
什么是
struct Key。这段代码编译时没有警告吗 -
哎呀,改成 struct Test。
-
我不确定
table是什么所以我不知道sizeof(*table)应该做什么。 -
它已经写在其中一个答案中,但您可能希望在对 malloc 的调用中使用
sizeof(struct Test)而不是sizeof(struct Test*) -
@m24p 那是*数组。
标签: c arrays segmentation-fault malloc sizeof