我是C编程的新手(我的主要区域是java),在java中存在我可以制作的ArrayList
ArrayList<Class> arraylist = new ArrayList<Class>();
我的类Class可以包含多个项目,例如int或string。
在c中,我发现我不能这样做但需要做那样的事情,所以我做了这个
typedef struct vectorObject {
int myInt;
char *charPointer;
} vectorObject;
我定义了一个我的结构的指针:
vectorObject *listVectorObject;
并使用
#define MAX_FILE_SIZE 50000
当我想分配内存时,我用它:
int i;
listVectorObject = malloc(MAX_FILE_SIZE);
if (listVectorObject == NULL ) {
printf("Out of memory1\n");
exit(1);
}
for (i = 0; i < MAX_FILE_SIZE; i++) {
listVectorObject[i].charPointer= malloc(MAX_FILE_SIZE);
if (listVectorObject[i].charPointer == NULL ) {
printf("Out of memory2\n");
exit(1);
}
}
问题是我总是得到一个
Out of Memory2
我已经尝试了一切,我无法找到我的错误所在。请你帮助我好吗? 谢谢!
答案 0 :(得分:3)
我认为你不想要50000个vectorObjects,每个都有50000字节的char-buffer。
所以看看这个:
int i, howmany= 1000;
vectorObject *listVectorObject = malloc(sizeof(vectorObject)*howmany); // list of 1000 vectorObjects
if (listVectorObject == NULL ) {
printf("Out of memory1\n");
exit(1);
}
// one file-size char-pointer for each vector object above
for (i = 0; i<howmany; i++) {
listVectorObject[i].charPointer= malloc(MAX_FILE_SIZE);
if (listVectorObject[i].charPointer == NULL ) {
printf("Out of memory2\n");
exit(1);
}
}