gpt4 book ai didi

c - 反对 static int 指针的参数

转载 作者:行者123 更新时间:2023-12-01 15:06:24 25 4
gpt4 key购买 nike

我正要调试别人的代码,我偶然发现了一种处理全局数组的“方式”,我认为这种方式非常糟糕,但第一个使用它的人发誓要这样做。我需要找到反对它的论据。这是简化后的代码(这不是原始代码,只是一个抽象版本)

所以我的问题是:您会提出哪些论点(或者可能是一些导致此方法失效的代码)?

int test(int i, int v, int type, int** t)
{
static int *teeest;
int result = 0;
switch(type)
{
case (1):
{
int testarr[i];
teeest = testarr;
}
break;
case (2):
result = teeest[i];
break;
case (3):
teeest[i] = v;
break;
}
if (t != NULL)
{
*t = teeest;
}
return result;
}

int main()
{
int *te = (int*)1;
test(5, 0, 1, &te);
printf("%p\n", te);
int i=0;
for(;i<5;i++)
{
test(i, i, 3, NULL);
printf("Value: %d\n", test(i,0,2, NULL));
}
return 0;
}

最佳答案

局部变量在它们声明的 block 之后是死的,所以这段代码是未定义的行为。就像每个访问随机地址一样,它可能有效,但也可能无效。

请注意,如果您使用 malloc 而不是 int testarr[i],(并且担心释放之前的数组,并初始化 teeest),它将是正确的.这段代码的问题与静态指针无关。

关于c - 反对 static int 指针的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049255/

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