首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中初始化数组时的故障分割

C中初始化数组时的故障分割
EN

Stack Overflow用户
提问于 2014-12-29 05:00:34
回答 3查看 479关注 0票数 1

我是一个非常初学者在C,我经历了现有的问题,但无法理解,因为他们涉及字符串和字符。下面是我代码中的一小部分:

代码语言:javascript
复制
#define grid 32

int main (void)
{
int NU, NV, NP;
NU=(grid-1)*grid;
NV=grid*(grid-1);
NP=grid*grid;
double u[NU], uc[NU];
double v[NV], vc[NV];
double p[NP], pc[NP];

//Initialization


// Initializing u

    for (i=0; i<(grid-1); i++)
    {
        for (j=0; j<(grid); j++)
        {
            int k=j*grid+i;

            if (j==(grid-1))
            {
            u[k]=1.0;
            }
            else if (j==(grid-2) && i>0 && i<(grid-2))
            {
            u[k]=1.0;
            }
            else
            {
            u[k]=0.0;
            }
        }
    }


// Initializing v
for (j=0; j<(grid-1); j++)
{
    for (i=0; i<grid; i++)
    {
        int k=j*grid+i;
        v[k]=0.0;
    }
}

// Initializing p
for (j=0; j<grid; j++)
{
    for (i=0; i<grid; i++)
    {
        int k=j*grid+i;
        p[k]=1.0;
    }
}

我正在尝试初始化这些数组,但却得到了分段错误。请帮我这个忙。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-29 05:08:09

这一行是问题所在:

代码语言:javascript
复制
int k=j*grid+i;

它会使数组索引超出界限。当您访问u[k]时,您将得到一个seg错误。此外,没有必要使用2个循环来初始化一个一维数组,除非这里有一个我不知道的特定逻辑。

票数 4
EN

Stack Overflow用户

发布于 2014-12-29 05:22:21

你定义了

代码语言:javascript
复制
NU=(grid-1)*grid;
NV=grid*(grid-1);
NP=grid*grid;

现在,让我们看看您在多大程度上访问循环中的数组元素。

代码语言:javascript
复制
for (i=0; i<(grid-1); i++)
{
    for (j=0; j<(grid); j++)
    {
        int k=j*grid+i; // so in the max case k = (grid-1)*grid+grid-2 = grid*grid+2
        ...             // and it is larger than NU so it will be accessing wrong memory
                        // memory region
    }
}

按照相同的分析,以确保其他数组初始化不超过边界。

票数 1
EN

Stack Overflow用户

发布于 2014-12-29 05:06:31

数组初始化可以导致SEGFALT的唯一原因是通过读取或写入不存在的元素。

实现这一点的最常见方法是使用超出数组界限的索引。在C中,最低的元素是索引0 (0),最高的是N-1,其中N是为数组声明的元素数。

代码语言:javascript
复制
int  array [5000];

array [-1] = 0;   /* BAD */
array [5000] = 0;   /* BAD */

这两种访问都是无效的。他们可能会。它们可能会改变另一个变量的值。他们似乎什么也没做。或者他们看起来很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27683629

复制
相关文章

相似问题

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