0

我有一个 C 程序,这很简单,但我在智能地使用指针方面相当糟糕。如果有人可以帮助我解决这个问题,我将不胜感激。它有两个功能,然后是主要功能。第一个函数创建一个包含 10 个整数 1-10 的数组。第二个函数打印出该数组。谢谢,

#include<stdio.h>

//function to create array of 10 ints
int* myArray(void)
{
int array[10], i;

for(i = 0; i < 10; ++i)
{
    array[i] = i + 1;
}
return array;
}


//function to printout the array of 10 ints
void printArray(void)
{
int *array = myArray();
int i;
for(i = 0; i < 10; ++i)
{
printf("%d ", array[i]);
}
}

//my main
int main()
{
myArray();
printArray();

}

我目前得到的输出是 1 1 2 3078316 5 6 3078824 257921824 1905931270 -2 非常混乱哈哈。

4

1 回答 1

5

问题是您正在从函数返回一个局部变量myArray。声明int array[10]将放入array堆栈,并在myArray返回时被销毁。这意味着myArray返回一个无效的指针。

如果需要在函数中创建数组,请使用malloc. 那是:

int *array = (int *)malloc(10 * sizeof(int));

请注意,在将来的某个时间点,您将需要free()数组。例如,在printArray

int *array = myArray();
/* do some stuff with array */
free(array);
于 2012-12-10T02:05:51.613 回答