我定义了一个结构,
struct RadBuck {
int size,
int pos,
int head
};
我想创建一个这个结构的数组RadBuck *R[n]
。如果n
很小,一切都很好,但是当我达到9 MB时,我就会出现分段错误。我对int a[n]
也有同样的问题,但我通过malloc
来克服int *a = (int*) malloc(n*sizeof(int));
由于结构不可能,我很困惑。
答案 0 :(得分:2)
由于结构不可能,我很困惑。
这肯定 可能:
#include <stdlib.h> /* for malloc() */
#include <stdio.h> /* for perror() */
size_t n = 42;
struct RadBuck * p = malloc(n * sizeof(*p)); /* Here one also could do sizeof(struct RadBuck). */
if (NULL == p)
{
perror("malloc() failed");
}
else
{
/* Use p here as if it were an array. */
p[0].size = 1; /* Access the 1st element via index. */
(p + n - 1)->size = 2; /* Access the last element via the -> operator. */
}
free(p); /* Return the memory. */
struct RadBuck {
int size;
int pos;
int head;
};
使用分号(;
)分隔结构的成员声明。
答案 1 :(得分:0)
当您使用malloc
或声明大小为n
的数组时,编译器会尝试将所需空间分配为内存中的连续空间。因此,如果您需要大量内存,则应尝试使用链接列表而不是向量。当您使用链接列表时,您的元素在内存中是稀疏的,您应该获得更多。
如果要使用链接列表,可以像这样重写结构:
struct RadBuck {
int size;
int pos;
int head;
struct RadBuck *next;
};