簡體   English   中英

使用malloc為C中的Card卡分配內存?

[英]Using malloc to allocate memory for my Card deck in C?

我試圖使用malloc分配特定數量的內存,但是當我運行程序時,它會給出一些隨機的字母輸出,我看不出它有什么問題。 這是我第一次嘗試使用malloc ,希望您能理解。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ACE 1
#define CardSize 52

void count();

int main()
{
    count();
    return 0;

}
void count() {
    int *cards;
    int i;
    cards = (int *)malloc(CardSize*sizeof(int));
    for (i = 0; i < 4; i++) {
        for (i = 1; i < 14; i++) {
            printf("%d\n", cards[i]);
        }

    }
}

基本上,它應該在我的紙牌數組[52]中1到13分別打印4次。 我不明白為什么它不會這樣做,希望有人可以幫助我。

基本上,它應該在我的紙牌數組[52]中1到13分別打印4次。 我不明白為什么它不會這樣做

在for循環中,您僅使用了一個控制變量i 對於打印1-13,您必須分配值,而在代碼中沒有分配任何位置。 試試這個代碼:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ACE 1
#define CardSize 52

void count();

int main()
{
    count();
    return 0;

}
void count() {
    int *cards;
    int i,j;
    cards = malloc(CardSize*sizeof(int));
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 13; j++) {
             cards[i*13+j]=j+1;
            printf("%d ", cards[i*13+j]);
        }
    printf("\n");
    }
free(cards);
}
 for (i = 0; i < 4; i++) { for (j = 0; j < 14; j++) { cards[i*13+j]=j+1; printf("%d ", cards[i*13+j]); } 

步驟1:這里首先進行循環初始化i=0

步驟2:第二個循環初始化j=0

步驟3:紙牌[i * 13 + j] = j + 1; 將執行。這里j=0i=0因此將分配卡[0] = 1

步驟4: printf將打印cards[i*13+j]值,其中j=0因此將打印紙牌[0]的值。 再次循環將轉到步驟2,並遞增j。 最多可打印1-13。

步驟5:再次啟動first for循環,並再次打印1-13,依此類推,直到first for循環完成。

注意: 不要強制轉換malloc ,我建議在將動態內存分配給free memory之后使用free()

您也可以使用單循環而不是雙循環

for (i = 0; i < CardSize; i++) {
             cards[i]=(i%13)+1;
            printf("%d ", cards[i]);
    }

您為指針分配了內存,但從未初始化它。 而且您打印它並沒有得到預期的輸出。

您可以按以下方式修改循環-

    while(i<52){                      // first initialize i=0
        j=1;                          // set j to 1 in each iteration
        while(j<14){                  // iterate for 14 times
             cards[i]=j;              // initialize chards
             printf("%d", cards[i]);
             j++;
             i++;
        }
       printf("\n");
    }

輸出量

注意 -

1.您應該檢查malloc的返回,並free分配的內存。

2.強制轉換為malloc語句是多余且不必要的

您有兩個循環,因此需要兩個控制變量,並且必須計算線性化數組的索引。

void count() {
    int *cards;
    cards = (int *)malloc(CardSize*sizeof(int));
    for ( int i = 0; i < 4; i++) { // first loop with control varible i
        for (int j = 0; j < 13; j++) { // second loop with control varible j
            int arrI = i*13+j; // linearized index 
             cards[arrI]= /* what ever */;
            printf("%d\n", cards[arrI]);
        }

    }
    free(cards);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM