2

私は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

私はすでにすべてを試しましたが、間違いがどこにあるのかわかりません。手伝っていただけませんか?ありがとう!!

4

1 に答える 1

3

それぞれ 50000 バイトの文字バッファーを持つ 50000 個の vectorObjects が必要だとは思いません。

だからこれを見てください:

  • 最初に 1000 個の vectorObjects のリストを作成します
  • 次に、メモリ チャンクを char-pointer に割り当てるそれぞれについて

.

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);
     }
}
于 2013-06-04T15:27:00.737 に答える