在函数的指针 Returns 之后我无法打印它
After a pointer Returns from a function i cant print it
我对 C 比较陌生。我的程序应该用随机数填充数组,我必须使用 1 个函数找到最大值和最小值。该程序运行良好,直到我必须 return 我的 2 个指针从函数中获取的值。当我去打印它们时,porgram 停止工作并退出,return 值为 3221225477。我已经尝试修复这个问题 3 个小时,我快要疯了。请以任何方式提供帮助,我将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void MaxMin(int size, int *B, int *Max, int *Min);
int main(int argc, char *argv[])
{
int N, i,*A,*MAX,*MIN;
srand(time(NULL));
/*Making sure the user enters a proper value for the array*/
do
{
printf("Give the number of spaces in the Array\n");
scanf("%d",&N);
}
while(N<1);
A = (int *) malloc(N*(sizeof(N)));
/*Giving random numbers to the array and printing them so i can make sure my code is finding the max min*/
for(i=0;i<N;i++)
{
A[i]=rand()%100;
printf("\n%d\n",A[i]);
}
/*Calling my void function so that the pointers MAX and MIN have a value assigned to them */
MaxMin(N, A, MAX, MIN);
/*Printing them*/
printf("\nMax = %d\nMin = %d",*MAX,*MIN);
free(A);
return 0;
}
/*The function*/
void MaxMin(int size, int *B, int *Max, int *Min)
{
/*using 2 temporary ints to get max min cause pointers and arrays confuse me*/
int max=B[0],min=B[0],i;
for(i=1;i<size;i++)
{
if(max<B[i])
{
max = B[i];
}
if(min>B[i])
{
min = B[i];
}
}
/*These have the proper value last i chekced */
Max = &max;
Min = &min;
}
(edit) 解决方案 非常感谢您的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void MaxMin(int size, int *B, int *Max, int *Min);
int main(int argc, char *argv[])
{
int N, i,*A,MAX ,MIN ;
srand(time(NULL));
/*Making sure the user enters a proper value for the array*/
do
{
printf("Give the number of spaces in the Array\n");
scanf("%d",&N);
}
while(N<1);
A = (int *) malloc(N*(sizeof(int)));
/*Giving random numbers to the array and printing them so i can make sure my code is finding the max min*/
for(i=0;i<N;i++)
{
A[i]=rand()%100;
printf("\n%d\n",A[i]);
}
/*Calling my void function so that the pointers MAX and MIN have a value assigned to them */
MaxMin(N, A, &MAX, &MIN);
/*Printing them*/
printf("\nMax = %d\nMin = %d",MAX,MIN);
free(A);
return 0;
}
/*The function*/
void MaxMin(int size, int *B, int *Max, int *Min)
{
*Max=B[0];
*Min=B[0];
int i;
for(i=1;i<size;i++)
{
if(*Max<B[i])
{
*Max = B[i];
}
if(*Min>B[i])
{
*Min = B[i];
}
}
}
你有三个错误:
在 main
中,您不分配 MAX
或 MIN
任何值。所以你把垃圾传递给 MaxMin
.
在MaxMin
中,Max
和Min
即将超出范围。在它们超出范围之前更改它们的值对任何事情都没有影响。
在 main
中,您没有创建任何地方来保存最大值和最小值。那么您希望将它们存储在哪里?
您按值向函数 MaxMin
传递了指针 MAX
和 MIN
。那就是该函数处理传递的指针的(不确定的)值的副本。更改副本不会影响原始参数。
在 main 中,您应该将 MIN 和 MAX 声明为 int 类型的对象。
int N, i,*A, MAX, MIN;
并调用函数,如
MaxMin(N, A, &MAX, &MIN);
在你应该写的函数中
*Max = &max;
*Min = &min;
最后在 main 中你应该像这样调用 printf
printf("\nMax = %d\nMin = %d", MAX, MIN);
注意这个语句中使用的表达式sizeof( N )
A = (int *) malloc(N*(sizeof(N)));
容易出错。变量 N 的类型可以从类型 int
更改为类型 size_t
。在这种情况下,分配的内存大小将不正确,您应该写成例如
A = (int *) malloc(N*(sizeof( *A )));
我对 C 比较陌生。我的程序应该用随机数填充数组,我必须使用 1 个函数找到最大值和最小值。该程序运行良好,直到我必须 return 我的 2 个指针从函数中获取的值。当我去打印它们时,porgram 停止工作并退出,return 值为 3221225477。我已经尝试修复这个问题 3 个小时,我快要疯了。请以任何方式提供帮助,我将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void MaxMin(int size, int *B, int *Max, int *Min);
int main(int argc, char *argv[])
{
int N, i,*A,*MAX,*MIN;
srand(time(NULL));
/*Making sure the user enters a proper value for the array*/
do
{
printf("Give the number of spaces in the Array\n");
scanf("%d",&N);
}
while(N<1);
A = (int *) malloc(N*(sizeof(N)));
/*Giving random numbers to the array and printing them so i can make sure my code is finding the max min*/
for(i=0;i<N;i++)
{
A[i]=rand()%100;
printf("\n%d\n",A[i]);
}
/*Calling my void function so that the pointers MAX and MIN have a value assigned to them */
MaxMin(N, A, MAX, MIN);
/*Printing them*/
printf("\nMax = %d\nMin = %d",*MAX,*MIN);
free(A);
return 0;
}
/*The function*/
void MaxMin(int size, int *B, int *Max, int *Min)
{
/*using 2 temporary ints to get max min cause pointers and arrays confuse me*/
int max=B[0],min=B[0],i;
for(i=1;i<size;i++)
{
if(max<B[i])
{
max = B[i];
}
if(min>B[i])
{
min = B[i];
}
}
/*These have the proper value last i chekced */
Max = &max;
Min = &min;
}
(edit) 解决方案 非常感谢您的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void MaxMin(int size, int *B, int *Max, int *Min);
int main(int argc, char *argv[])
{
int N, i,*A,MAX ,MIN ;
srand(time(NULL));
/*Making sure the user enters a proper value for the array*/
do
{
printf("Give the number of spaces in the Array\n");
scanf("%d",&N);
}
while(N<1);
A = (int *) malloc(N*(sizeof(int)));
/*Giving random numbers to the array and printing them so i can make sure my code is finding the max min*/
for(i=0;i<N;i++)
{
A[i]=rand()%100;
printf("\n%d\n",A[i]);
}
/*Calling my void function so that the pointers MAX and MIN have a value assigned to them */
MaxMin(N, A, &MAX, &MIN);
/*Printing them*/
printf("\nMax = %d\nMin = %d",MAX,MIN);
free(A);
return 0;
}
/*The function*/
void MaxMin(int size, int *B, int *Max, int *Min)
{
*Max=B[0];
*Min=B[0];
int i;
for(i=1;i<size;i++)
{
if(*Max<B[i])
{
*Max = B[i];
}
if(*Min>B[i])
{
*Min = B[i];
}
}
}
你有三个错误:
在
main
中,您不分配MAX
或MIN
任何值。所以你把垃圾传递给MaxMin
.在
MaxMin
中,Max
和Min
即将超出范围。在它们超出范围之前更改它们的值对任何事情都没有影响。在
main
中,您没有创建任何地方来保存最大值和最小值。那么您希望将它们存储在哪里?
您按值向函数 MaxMin
传递了指针 MAX
和 MIN
。那就是该函数处理传递的指针的(不确定的)值的副本。更改副本不会影响原始参数。
在 main 中,您应该将 MIN 和 MAX 声明为 int 类型的对象。
int N, i,*A, MAX, MIN;
并调用函数,如
MaxMin(N, A, &MAX, &MIN);
在你应该写的函数中
*Max = &max;
*Min = &min;
最后在 main 中你应该像这样调用 printf
printf("\nMax = %d\nMin = %d", MAX, MIN);
注意这个语句中使用的表达式sizeof( N )
A = (int *) malloc(N*(sizeof(N)));
容易出错。变量 N 的类型可以从类型 int
更改为类型 size_t
。在这种情况下,分配的内存大小将不正确,您应该写成例如
A = (int *) malloc(N*(sizeof( *A )));