我想创建一个动态的二维数组并分配值,我无法理解我的错误。
我的代码:
#include <stdio.h>
#include <stdlib.h>
void main () {
int **a;
int k;
int nrows, ncols;
int i, j, x;
printf("Enter number of rows and columns: \n");
scanf("%d%d",&nrows,&ncols);
if( (nrows >=5 && nrows <=10) || (ncols >=5 && ncols <=10) )
{
if(nrows == ncols){
a = (int **)malloc(nrows * sizeof(int *));
if (a == NULL)
exit(1);
}else{
printf("Rows must be equal to Columns\n");
exit(1);
}
}else{
printf("Rows or Columns must be between 5 to 10\n");
exit(1);
}
for(i = 0 ;i < nrows ; i++) {
*(a+i) = (int *)malloc(ncols * sizeof(int));
if(*(a+i) == NULL) {
for(k = 0; k < i; k++){
free(a[k]);
free(a);
exit(1);
}
}
}
printf("Write down your array:\n");
for(i = 0 ; i < nrows; i++){
*a = *(a + i);
for(j = 0; j < ncols; j++){
scanf("%d", &x);
*(*a + j) = x;
}
}
printf("Your array is:\n");
for(i = 0 ; i < nrows; i++){
*a = *(a+i);
for(j = 0; j < ncols; j++){
printf("%d ", *(*a + j) );
}
printf("\n");
}
}
答案 0 :(得分:0)
行
*a = *(a + i);
是问题:您正在更改第一列指针。你可能想在这里做类似
的事情int* tempColumnPointer = *(a + i);
一些提示:
a[i]
比*(a + i)
a[i][j]
代替*(*(a + j) + i)
。