c - 数组分配不需要的内存

标签 c

问题陈述: 给定一个整数序列。对于每组 5 个连续元素 (1..5、6..10 等)找到最小值并将其放入另一个数组中( 长度是初始数组的 1/5)。 使用一个函数来获取指向 5 个元素的序列的指针和一个 指向将存储结果的整数的指针。

void main()
{
int n1,i,z,k;
int v[50],x[10];

printf("length of array:");
scanf("%d" , &n1);

k = -1;

readArray ( n1, v );
for (i=0; i<=n1; i++)
{    
    searchArray ( &k, &v[i], &x[k] );
}
writeArray ( k , x );
}

v[i] 是初始数组,x[k] 是结果数组,k 点是结果应该放在 x 中的位置。

void searchArray ( int *k, int * v, int * x)
{

int i,z;
bool dif;

dif = false;
z = z+1;
if (v[i-1] == (v[i]-1))
{
    dif = true;
    if ((dif == true) && (z == 4))
    {
        *k = *k+1;
        x[*k] = v[i-4];
        z = 0;
        if (v[i]+1 == v[i+1])
        {
            i = i+1;
        }
    } 
}
else if ( dif != true )
     {
         z = 0;
     }
}

问题:对于从 1 到 10 的数组,结果是 x[0] = 134513473 x[1] = 6,如果我查看 x[-1] 是 1。所以不要将 1 放入 x[0 ] 它将它放入 x[-1] 中,x[0] 返回内存地址。

最佳答案

一个问题是线路:

z = z+1;

您尚未将 z 初始化为任何内容,因此此后使用 z 的所有内容都在使用垃圾。您的下一行是:

if (v[i-1] == (v[i]-1))

由于 i 未初始化,因此您再次处理垃圾。这可不是什么令人高兴的事态。

如果您设计正确,您的函数不需要 k 作为参数。不过,您需要修改调用以传递数组中的正确偏移量。 (目前,您正在扫描 0..4、1..5、2..6,而不是 0..4、5..9、10..14。)

关于c - 数组分配不需要的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878669/

相关文章:

在 while 循环中执行 scanf 后代码崩溃

为 C 编写标准 unix 程序时的命令行参数 "−"

c - 在建立连接之前检索本地 IP

c - _fullpath 与 GetFullPathName

C 程序错误 "Conflicting types for ' 函数'"

c - strstr() - C 库函数在字符串 (haystack) 中找不到字符串 (needle)

c - 在 c 中反转数组 - 不会打印 -

c - C 中的矩阵排序

c - 使用边界条件导航映射到 1D 的 2D 数组

c - 无论我尝试什么,我的指针/地址都是错误的