2013-06-30 2 views
-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 будет компилировать код просто отлично.Динамическое распределение Visual Studio многомерного массива

Вот errorrs:

(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 
+0

Ошибки должны дать вам подсказку, как исправить код. –

+0

объявление переменной, помещенное в начале блока. – BLUEPIXY

ответ

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]); 
} 

выше было совершенно неправильно

+0

Мне было просто любопытно, что это будет отображаться после использования бесплатной функции. Так или иначе, в CodeBlocks работало просто отлично, давая мне бесполезное количество чисел, поэтому я нашел то, что мне нужно было знать. В VS разбился! Таким образом, достаточно освободить один массив, а другой автоматически освободится, как вы это делали в коде выше? – user1908349

0

Проблема у вас есть, что Визуальное S Компилятор tudio C поддерживает только стандарт 1989 года, а не стандарты 1999 года & 2011.

Ключевое различие между C89 и более поздними версиями заключается в том, что C89 допускает объявления переменных только в верхней части блока перед любым другим кодом.

Что это означает, что вы должны объявить матрицу перед вызовом Printf или зсапЕ, например, так:

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 на некоторые другие проблемы с вашим кодом.

+0

Спасибо, я не знал, что Visual Studio использует C89. – user1908349

Смежные вопросы