在C中使用malloc为我的卡片组分配内存

  • 本文关键字:内存 分配 malloc c malloc
  • 更新时间 :
  • 英文 :


我正试图用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("%dn", cards[i]);
        }
    }
}

基本上,它应该打印出我的卡片阵列中的1-13张[52]卡片,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:再次开始第一个for循环,再次打印1-13,依此类推,直到第一个for环路完成。

注意:不要强制转换malloc,我建议在动态内存分配后使用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("%dn", cards[arrI]);
        }
    }
    free(cards);
}

相关内容

  • 没有找到相关文章

最新更新