gpt4 book ai didi

c - 添加两个数组会产生不稳定的返回

转载 作者:行者123 更新时间:2023-11-30 20:55:43 25 4
gpt4 key购买 nike

我创建了一个脚本来添加两个数组,如下所示。当执行下面的代码时,它不会产生一致的结果。每次执行脚本时我都会收到不同的答案。我很好奇造成这种结果的原因是什么。

//
// main.c

#include <stdio.h>
#include <unistd.h>

int *AddArrays(int *A, int *B, int a, int b);

int main(void)

{
int A[5] = {1,2,3,4,5};
int B[7] = {6,7,8,9,10,11,12};
int a = 5;
int b = 7;
int c = a + b;
int x = 0;
int NewArray[c], *ArrayPtr;

ArrayPtr = AddArrays(A,B,a,b);

for( x = 0; x < c; x++)
{
*(NewArray + x) = *ArrayPtr;

printf("Value of NewArray[%d] = %d\n", x, *(NewArray+x));
sleep(1);

ArrayPtr++;
}


return 0;
}

int *AddArrays(int *A, int *B, int a, int b)
{
int c;
int d;
int NewArray[a+b];

for (c = 0; c < a; c++)
{
NewArray[c] = *A;
A++;

}

for (d = 0; c < d; d++)
{
NewArray[a] = *B;
a++;
B++;
}

return NewArray;
}

最佳答案

使用malloc是有原因的。

此声明:

return NewArray;

返回指向数组第一个元素的指针。但是您在堆栈上声明了该数组(即不是动态的,没有 malloc),因此一旦控制权传出函数,该数组就会超出范围并且不再可以安全使用。您稍后使用它会导致未定义的行为,如果您得到的只是随机数,那么您很幸运。

NewArray 设为静态并不是一个好的解决方案。一方面,这意味着您只能使用该函数一次——如果再次调用它,它将用新参数的内容覆盖数组,并且前一次调用的结果将以您几乎无法更改的方式更改。当然不是故意的。

您还可以在函数外部声明 NewArray 并传入指向它的指针;两种设计之间的选择取决于具体情况,但如果您想学习该语言,那么我建议您尝试两种设计。

关于c - 添加两个数组会产生不稳定的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949157/

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