gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:23:45 27 4
gpt4 key购买 nike

问题陈述: 给定一个整数序列。对于每组 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com