利用C/C++编写程序时,在函数中申请数组空间并返回给其他函数时需要注意:

如果是在函数中直接定义,如int arry[10][10];并return arry,这样的做法可能会造成数组内部数据紊乱,即原来的内存被覆盖

测试代码:

#include<stdio.h>

int n = 10;

int *test()

{

int arry[n];

for(int i = 0;i < n;i++)

{

arry[i] = 1;

}

for(int i = 0;i < n;i++)

{

printf("%d ",arry[i]);

printf("\n");

}

printf("数组在test函数中的地址:%p\n",&arry); 

return arry;

}

int main()

{

int *temp = test();

printf("数组在main函数中的地址:%p\n",&temp[0]); 

for(int i = 0;i < n;i++)

{

printf("%d ",temp[i]);

printf("\n");

}

return 0;

}

运行效果:

1.webp

解决方法1:在main函数中声明数组,将地址传入函数中,利用地址来对数组进行修改,测试代码如下:

#include<stdio.h>

int n = 10;

void test(int *arry)

{

for(int i = 0;i < n;i++)

{

arry[i] = 1;

}

for(int i = 0;i < n;i++)

{

printf("%d ",arry[i]);

printf("\n");

}

printf("数组在test函数中的地址:%p\n",&arry); 

}

int main()

{

int temp[n];

test(temp);

printf("数组在main函数中的地址:%p\n",temp[0]); 

for(int i = 0;i < n;i++)

{

printf("%d ",temp[i]);

printf("\n");

}

return 0;

}

运行效果:

2.webp

解决方法2:使用malloc申请内存,测试代码如下:

#include<stdio.h>

#include<stdlib.h>

int n = 10;

int *test()

{

int *arry;

arry = (int*)malloc(sizeof(int)*n);

for(int i = 0;i < n;i++)

{

arry[i] = 1;

}

for(int i = 0;i < n;i++)

{

printf("%d ",arry[i]);

printf("\n");

}

printf("数组在test函数中的地址:%p\n",&arry); 

return arry;

}

int main()

{

int *temp = test();

printf("数组在main函数中的地址:%p\n",&temp[0]); 

for(int i = 0;i < n;i++)

{

printf("%d ",temp[i]);

printf("\n");

}

return 0;

}

运行效果:

3.webp

在实际中使用malloc函数时需要使用free函数一起使用,需要释放内存,这里程序较短,所以我就没有添加。

扩展知识:二维数组利用malloc函数进行申请空间的方法:

创建一个n*n的二维数组的方法:

int n;
int** input()
 {
	scanf("%d",&n);
	int **arry;
	arry = (int **)malloc(sizeof(int *)*n);
	for(int i = 0;i < n;i++)
	{
		arry[i] = (int *)malloc(sizeof(int)*n);
	 }
	for(int i = 0;i < n;i++)
	{    
		for(int j = i+1;j < n;j++)
		{
			scanf("%d",&arry[i][j]);
		 }
	 }
	 return arry;
 }
分类: 其他

备案图标桂公网安备45020202000334桂ICP备20004521号-1