-2

私のプログラムは、実行時に2次元配列にメモリを割り当て、要素を取り込んで表示することを目的としています。私のプログラムはいくつかの例外をスローしていますが、誰かがそれを特定するのを手伝ってくれますか?

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

int main()
{


int i,j,row, col;
    int *ptr;
    printf("enter size of row and col\n");
    scanf("%d%d",&row,&col);
    ptr = (int *)malloc(row*col*sizeof(int));
    if(ptr==NULL)
    {
        printf("stderr, not able to allocate memory");
        exit(1);
    }
    else
    {
        printf("enter the element");
        for(i=0; i<row;i++)
            for(j=0;j<col;j++)
            {
              scanf("%d",ptr[i+j]);

            }
        for(i=0; i<row;i++)
        {   
            for(j=0;j<col;j++)
                printf("%d ",ptr[i+j]);
            printf("\n");
        }

    }
}
4

3 に答える 3

1

おそらく2次元配列として意図されたものへのアクセスは非常に疑わしく、毎回のptrようになるはずです(他の回答で言及されている混乱を修正した後)。ptr[row * i + j]scanf

于 2013-01-21T14:33:01.550 に答える
1

Alokが正しく推測したように、問題は呼び出しにありますscanf

scanf("%d",ptr[i+j]);

scanf変数自体ではなく、変数のアドレスを渡す必要があるためです。以下のいずれかを実行して、コードを修正できます。

scanf("%d",&ptr[i+j]);

scanf("%d",(ptr+i+j));

psマイナーニット、コンパイラの目には、1D配列を割り当てています.2D配列であるかのようにアクセスしているのは、その使用のみです。

pps PaulR が指摘しているように、2D 配列を適切にシミュレートするには &ptr[i*col+j] を使用する必要があります。

于 2013-01-20T08:12:30.953 に答える
1

scanf()は、引数を変更する必要があるため、引数へのポインターを取ります。したがって、

scanf("%d", ptr[i + j]);

する必要があります

scanf("%d", &ptr[i + j]);

また

scanf("%d", ptr + i + j);

代わりは。

(本当に 2 次元配列をエミュレートするつもりなら、

&ptr[i * columns + j]

とにかく - それを指摘してくれた PaulR に感謝します。)

于 2013-01-20T08:13:18.637 に答える