c - 无法随机洗牌

标签 c random malloc shuffle srand

我正在做一个随机洗 10 张牌 (12) 次的项目,但它不适用于我的代码。

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

void show(int[],int);

void shuffle(int[],int,int);

int main (void)
{
    int karten[]={1,2,3,4,5,6,7,8,9,10};
    int n = sizeof(karten)/sizeof(int);
    //printf("%d",n);
    int s=12;

    srand(time(NULL));
    printf("Karten vor dem Mischen: \n");
    show(karten,n);
    shuffle(karten,n,s);
    printf("Karten nach dem Mischen:\n");
    show(karten,n);
    return 0;
}
void show(int karten[],int n)
{
    for(int i=0;i<n;i++)
    {
        printf("%d,",karten[i]);
    }
    printf("\n");
}
void shuffle(int karten[],int n,int s)
{
    int i=0;
    int d=0;
    int v[]={(int)malloc(sizeof(karten))};
    for(int z=0;z<=s;z++)
    {
        i=rand()%10;
        d=rand()%10;
        //printf("%d-->%d\n",i,d);
        v[i]=karten[i];
        v[d]=karten[d];
        karten[d]=v[i];
        karten[i]=v[d];

    }
    printf("Es wurden %d Vertauschungen gemacht\n",s);
    free(v);
}

错误是

(((process returned 255))) 

程序崩溃了。

最佳答案

void shuffle(int karten[],int n,int s) 相当于
void shuffle(int *karten,int n,int s)
所以 int v[]={(int)malloc(sizeof(karten))}; 仅分配 karten
这是一个指向 int 的指针,所以 4 个字节(在大多数系统上)。
因此,您正在尝试访问未分配的内存。

关于c - 无法随机洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34900059/

相关文章:

在 C 的过程中调用 free

c - 当 c 是一个字符时使用 scanf ("%d", &c) 会发生什么?

c - 在 c 中重新分配 char ** 的内存

random - 保存程序生成的所有随机数,然后在 Racket 中重复使用它们

带有 jemalloc 的 C++ STL

c - difftime 和 '-' 有什么区别?

javascript - JavaScript 中的随机对象生成器

python - 遗传算法不起作用

c - 将单指针和双指针传递给c中的函数

c - 如何正确使用函数?