[英]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=0
和i=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.