使用动态内存分配和数组的C程序中的错误

使用动态内存分配和数组的C程序中的错误,c,ubuntu,C,Ubuntu,用C语言编程,使用动态内存分配在2D数组中查找最大值 int main() { int i, arr[m][n], j, m, n; int max = 0; int *ptr; printf("enter the value m"); scanf("%d", m); printf("enter the vaue of n"); scanf("%d", n); ptr = (int*) malloc(m * n * 4); printf("enter the

用C语言编程,使用动态内存分配在2D数组中查找最大值

int main() {
  int i, arr[m][n], j, m, n;
  int max = 0;
  int *ptr;

  printf("enter the value m");
  scanf("%d", m);
  printf("enter the vaue of n");
  scanf("%d", n);
  ptr = (int*) malloc(m * n * 4);
  printf("enter the values\n");

  for (i = 0; i < m; i++)
  {
    for (j = 0; j < n; j++)
    {
      scanf("%d", ((ptr + i * n) + j));
    }
  }

  max = arr[0][0];
  for (i = 0; i < m; i++)
  {
    for (j = 0; j < n; j++)
    {
      if (max < *((ptr + i * n) + j));
      max = *((ptr + i * n) + j);
    }
  }
  printf("%d", max);
}

我对您的代码进行了更改,以删除您遇到的错误。我评论了我所做的更改

int main()
{
    /*int i, arr[][], j, m, n;*/
    /* Because arr is allocated dynamically, you have to declare as a pointer to int. */
    int i, *arr, j, m, n;
    int max = 0;
    int *ptr;

    printf("enter the value m");
    scanf("%d", m);
    printf("enter the vaue of n");
    scanf("%d", n);
    /*ptr = (int*)malloc(m * n * 4);*/
    /* It is better to use sizeof(int) because int does not have the same length of all computers. */
    ptr = (int*)malloc(m * n * sizeof(int));
    printf("enter the values\n");

    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            scanf("%d", ((ptr + i * n) + j));
        }
    }

    /*max = arr[0];*/
    /* To get the first int at arr, you could also use arr[0], but not arr[0][0] because */
    /* this would require that arr be an array of pointers to array of int's, which is not the case. */
    max = *arr;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < n; j++)
        {
            if (max < *((ptr + i * n) + j));
            max = *((ptr + i * n) + j);
        }
    }
    printf("%d", max);
}

你必须学习算法和编程语言C。 因此,您可以在此网站上找到一些课程:

请尝试此代码的功能:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[]) {
    int i, j, m, n;
    int max;
    int **ptr;  

    printf("enter the value m: ");
    scanf("%d", &m);
    printf("enter the vaue of n: ");
    scanf("%d", &n);

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

    for (i = 0; i < m; i++) {
        *(ptr + i) = (int *)malloc(m * sizeof(int));
        for (j = 0; j < n; j++) {
            scanf("%d", (*(ptr + i) + j));
        }
    }

    max = **ptr;
    printf("\n\nMatrix:\n");
    for (i = 0; i < m; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", *(*(ptr + i) + j));
            if (max < *(*(ptr + i) + j))
                max = *(*(ptr + i) + j);
        }
        printf("\n");
    }

    printf("\nthe max is %d \n", max);

    return 0;
}

错误显示arr未定义和分段错误我认为它不能同时显示arr未定义和分段错误,因为第一个错误发生在编译时,另一个错误发生在运行时,如果arr未定义,则无法创建可执行文件;在if max的末尾<*ptr+i*n+j;。读取、理解并修复。错误显示arr未定义。如何修复