gpt4 book ai didi

c - 在函数中初始化的数组指针在返回后包含错误值

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:04 24 4
gpt4 key购买 nike

我遇到了一个问题,我肯定做错了什么。我需要调用一个返回指向 int 数组的指针的函数,但是当它返回后,数组中的值是错误的,并且缺少一些值。

int* patternForFirstDigit(int digit) {
int *pattern;
pattern = (int [6]){1,1,1,1,1,1};

switch (digit) {
case 0:
pattern = (int [6]){1,1,1,1,1,1};
break;

case 1:
pattern = (int [6]){1,1,2,1,2,2};
break;

default:
pattern = (int [6]){0,0,0,0,0,0};
break;
}

for (int i = 0; i < 6; i++) {
printf("%i\n", pattern[i]);
}

return pattern;
}

如果 digit = 1,这是打印的内容

1, 1, 2, 1, 2, 2

但是回来之后

int *pattern = patternForFirstDigit(0);
for (int i = 0; i < 6; i++) {
printf("%i\n", pattern[i]);
}

这是打印出来的

1, -1405451528, -1405449120, 366001

你知道哪里出了问题吗?

谢谢大家

PS:我使用的是 Xcode 4.6,我的项目使用的是 ARC,但我很确定这不是我出现问题的原因。

最佳答案

您不能返回指向在函数中创建的数组的指针。该数组在函数返回后不再存在,因此您的指针指向内存中某个随机的、无效的位置。

为指针分配内存(例如使用malloc())然后返回一个指针。这也意味着您需要在使用完指针后释放它(使用 free())。

伪代码如下:

int* patternForFirstDigit(int digit) {
int *pattern = (int*) malloc(sizeof(int)*N);
pattern[0] = 0;
pattern[1] = 1;
...

// Alternatively just create a local array and use a for-loop
// to copy the contents to the pattern array.

return pattern;
}

int *p = patternForFirstDigit(M);
// use p
free(p);

关于c - 在函数中初始化的数组指针在返回后包含错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15678968/

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