C中的动态程序

时间:2015-08-31 15:31:45

标签: c arrays pointers malloc

嗨,大家好我编辑了这些问题。这是我的整个代码。我给了我的程序基本的可读性。希望你们能理解这个程序。

#include<stdio.h>
#include<stdlib.h>
int Max_Min(int,int,int,int *, int *);
int *Max,Number;
int main()
{
    int n1, n2,Maximum_Element=0,*Max;
    int i = 0, j = 0;
    scanf("%d",&Number);
    Max =(int *) malloc(sizeof(int)*Number);//Array Max is created

        for (int k = 0;k <(Number/2);k++)
            {
            scanf("%d", &n1);
            scanf("%d", &n2);
            Max[k] = Max_Min(0,1,0,&n1,&n2);//Passing integer elements n1,n2 with flag 0
            }

    Maximum_Element=Max_Min(1,1,((sizeof(Max)*Number)/8),Max,Min);//Passing array elements Max,Min with flag 1 to function Max_Min

        printf("Maximum_Element=%d", Maximum_Element);
    return 0;
}

int Max_Min(int flag,int Max_Min_flag,int length,int *n1,int *n2)//n1 and n2 should be able to handle array and integers
{
    int i=0,j = 0,k1,k2,Min1 = 0, Min2 = 0,count=0, Not_Zero = 0,x=0,y=0, *New_Max = 0,*New_Min;

/*Recursive Loop for splitting the array elements and calling the array */
       if (flag == 1)
          {
           New_Max = (int *)(malloc(sizeof(int)*length));

        for (;i <= ((length) / 2);i = i + 2)//
          {
            k1 = n1[i];
            j = i + 1;
            if (j <= ((length + 1) / 2))
            {
                k2 = n1[j];
                New_Max[count] = Max_Min(0, 1, 0, &k1, &k2);//It is passing integer elements with flag 0 to function Max_Min 
                count++;
            }
        }
        New_Max[count] = n1[j + 1];


        for (int i = 0;i < count + 1;i++)
        {
  **/* Problem is assigning Max[i]=New_Max[i] is not getting assigned*/**
                Max[i] = New_Max[i];//Copying from New_Max to Max because New_Max will be overwritten,so possible chaunce of dataloss
                Not_Zero++;
            }

        while ((sizeof(Max) / 4 - (Not_Zero))>0)
        {
            Max[Not_Zero] = 0;
            Not_Zero++;
        }
        /*Logic for calling recursive functions based on the count*/
            if (count > 1)
               {
                count--;
                Max_Min(1, 1, count, Max, Min);//Calling Recursive function by Passing Entire Arrays with flag 1.
                }
            else if (count == 1 && Max[1] == 0)
              {
            *n1 = Max[0];
            *n2 = Min[0];
              }
           else if (count == 1 && Max[2] == 0)
             {
            Max_Min(1, 1, count + 1, Max, Min);
            count--;
            }

    }
/*Logic for Finding Maximum & Minimum element is present down*/
        if (flag == 0)
        {
            printf("flag");
            if (Max_Min_flag == 1)
            {
                if (*n1 > *n2)
                {

                }
                else if ((*n1 < *n2) && Max_Min_flag == 1)
                {
                    int temp = 0;
                    temp = *n1;//5
                    *n1 = *n2;//7
                    *n2 = temp;//5
                }
            }
            else if (Max_Min_flag == 2)
            {

                if (*n1 > *n2)//7>2
                {
                    int temp = 0;
                    temp = *n1;//2
                    *n1 = *n2;//2
                    *n2 = temp;//2,7

                }
                else if (*n1 < *n2)
                {

                }
            }
        }
    return *n1;//7
}

问题是在函数Max_Min()中分配Max [i] = New_Max [i]。它将运行时错误显示为“访问冲突写入位置0x00000000。”

2 个答案:

答案 0 :(得分:2)

首先,您需要malloc才能使用func

您必须在使用之前声明您的功能。

int*必须返回func

同样在printf&#34; n&#34;,第一&#34; Max&#34;和第二&#34; Max&#34;需要是同一个变量。重命名&#34; n&#34;到&#34; Max&#34;

这是使用额外#include <stdio.h> #include <stdlib.h> int *Max,Number=5; int* func(int *Max) { for(int j=0;j<5;j++) Max[j]=j;//Its not working in this line return Max; } int main() { Max=(int *) malloc(sizeof(int)*Number); for(int i=0;i<5;i++) Max[i]=i; int* x = func(Max); for(int i=0;i<5;i++) printf("%d", x[i]); } ;

更正的代码
x = "x" * 1024 * 1024 * 100

答案 1 :(得分:1)

以下仅包含对代码的少量修改,并且运行正常:

int *func(int *n);
int *Max,Number=5;
int main()
{
    int *x,i;
    Max=(int *) malloc(sizeof(int)*Number);
    for(i=0;i<Number;i++)
        Max[i]=i;
    x=func(Max);
    free(Max);
    return(0);
}

int *func(int *n)
{
    int j;
    for (j=0;j<Number;j++)
        n[j]=Number-j;   // reverse the number, just to check
    return Max;
}