首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >随机填充二维数组

随机填充二维数组
EN

Stack Overflow用户
提问于 2011-12-06 06:52:11
回答 4查看 631关注 0票数 0

这段代码对n<20很好,但对于n=40会给我访问冲突错误:这段代码将随机填充X和O。

代码语言:javascript
复制
 int i=0,j=0;
 int x=0,y=0;
 int n=40;
 for(i=0;i<n;i++)
 {
     for(j=0;j<n;j++)
         arr[i][j]='O';
 }

 srand(clock());
 for(i=0;i<n*n;i++)
 {
   x = rand()%n;
   y = rand()%n;
   if(arr[x][y] == 'O') arr[x][y]='X';
 }

声明:

代码语言:javascript
复制
 arr = (char**)malloc(n);
 for(i=0;i<n;i++)
    arr[i] = (char*)malloc(n);
EN

Stack Overflow用户

发布于 2011-12-06 07:04:14

代码语言:javascript
复制
for(i=0;i<n*n;i++)
{
   x = rand()%n;
   y = rand()%n;
   if(arr[x][y] == 'O') arr[x][y]='X';
   ...

n*narr只有n元素,arr[0...n-1]只有n元素。如果xy>= n,您将访问超出数组末尾的元素,并导致未定义的行为。在这种情况下,你很幸运,因为它会导致访问冲突。

因此,arr = (char**)malloc(n);应该是arr = (char**)malloc(n * sizeof(char*));

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8393049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档