【发布时间】:2018-10-21 21:07:43
【问题描述】:
所以我试图声明一个大小为 19,000 的结构,但是当我编译它时,我得到 Seg 错误,核心转储。我想我必须使用 malloc 但我不能 考虑到我没有使用指针,找出最好的语法!
Struct people{
char name[100]
char secondname[100]
}
int main(){
struct people p1[19000]
}
以上是我的问题对应的代码
任何帮助将不胜感激
【问题讨论】:
-
要么增加平台上的堆栈限制(即
ulimit -s unlimited),要么使用struct people *p1 = malloc(19000*sizeof *p1);在堆上分配。 -
而且,仅供参考,术语 “我认为我必须使用 malloc” 和 “我没有使用指针!!” 是一厢情愿想同时做。如果你做前者,你最好做后者。
-
为了强调@WhozCraig 所说的,当您使用
[ ]表示法来访问您正在使用指针的数组时,您只是没有意识到这一点。 -
malloc返回一个指针,所以无法避免它们;类似#include <stdlib.h>...struct people *p1 = malloc(sizeof *p1 * 19000); if(!p1) perror("people"), exit(EXIT_FAILURE);。 -
@ctx:从技术上讲,是的。数组在添加索引之前衰减到一个指针。 (
E1[E2]与(*((E1)+(E2)))相同——6.5.2.1/2。另见 6.5.2.1/1,约束。)