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

int main(void){
int n, i, j;

printf("Enter the number of rows and columns: ");
scanf("%d", &n);

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

for(i = 0; i < n; i++)
    matrix[i] = malloc(n * sizeof(int *));

// Read the matrix
for(i=0; i<n; i++)
   for(j=0; j<n; j++){
            printf("matrix[%d][%d]= ",i+1,j+1);
            scanf("%d",&matrix[i][j]);
            }

// Print the matrix
for(i = 0; i < n; i++){
    printf("%\n");
    for(j = 0; j < n; j++)
        printf("%d", matrix[i][j]);
}


// Free the allocated memory
for(i = 0; i < n; i++)
  for(j = 0; j < n; j++)
     free((void *)matrix[i]);

free(matrix);

// Just checking if the memory has been freed
for(i = 0; i < n; i++){
  printf("%\n");
     for(j = 0; j < n; j++)
        printf("%d ", matrix[i][j]);
}

system("PAUSE");
return 0;
}

我只是想动态分配一个矩阵。尽管在 CodeBlocks 中一切正常,但由于我们在大学使用 Visual Studio,我决定在 VS 2010 中测试代码。我很惊讶我有这么多错误并且代码无法编译。我想知道如何解决这个问题,以便 VS 可以很好地编译代码。

以下是错误者:

(10): error C2143: syntax error : missing ';' before 'type'
(13): error C2065: 'matrix' : undeclared identifier
(13): error C2109: subscript requires array or pointer type
(19): error C2065: 'matrix' : undeclared identifier
(19): error C2109: subscript requires array or pointer type
(26): error C2065: 'matrix' : undeclared identifier
(26): error C2109: subscript requires array or pointer type
(33): error C2065: 'matrix' : undeclared identifier
(33): error C2109: subscript requires array or pointer type
(33): error C2198: 'free' : too few arguments for call
(35): error C2065: 'matrix' : undeclared identifier
(35): warning C4022: 'free' : pointer mismatch for actual parameter 1
(41): error C2065: 'matrix' : undeclared identifier
(41): error C2109: subscript requires array or pointer type
4

2 回答 2

0
for(i = 0; i < n; i++)
    matrix[i] = malloc(n * sizeof(int *));

将上面更改为

for(i = 0; i < n; i++)
    matrix[i] = malloc(n * sizeof(int));

--

// Read the matrix
for(i=0; i<n; i++)
   for(j=0; j<n; j++){
            printf("matrix[%d][%d]= ",i+1,j+1);
            scanf("%d",&matrix[i][j]);
            }

上面也改成

// Read the matrix
for(i=0; i<n; i++)
   for(j=0; j<n; j++){
            printf("matrix[%d][%d]= ",i+1,j+1);
            scanf("%d",&matrix[i][j]);
            }

--

// Free the allocated memory
for(i = 0; i < n; i++)
  for(j = 0; j < n; j++)
     free((void *)matrix[i]);

free(matrix);

上面也改成

// Free the allocated memory

for(i = 0; i < n; i++){
     free((void *)matrix[i]);
     matrix[i] = NULL;
}

free(matrix);

--

// Just checking if the memory has been freed
for(i = 0; i < n; i++){
  printf("%\n");
     for(j = 0; j < n; j++)
        printf("%d ", matrix[i][j]);
}

以上是完全错误的

于 2013-06-30T22:10:07.527 回答
0

您遇到的问题是 Visual Studio 的 C 编译器仅支持 1989 标准,而不支持后来的 1999 和 2011 标准。

C89 和更高版本之间的一个关键区别是 C89 只允许在任何其他代码之前在块的顶部声明变量。

这意味着您必须在调用 printf 或 scanf 之前声明矩阵,如下所示:

int main(void){
   int n, i, j;
   int **matrix;

   printf("Enter the number of rows and columns: ");
   scanf("%d", &n);

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

这应该可以解决您看到的编译错误。检查 V_Maenolis 的答案以了解您的代码的其他一些问题。

于 2013-06-30T22:43:47.707 回答