0

皆さん、コードを完成させようとしていますが、値を取得する代わりにエラー メッセージが表示されます。先取特権番号 54 または 60 を入力しようとしているときに。

if(*arr[rows*columns]<num) or printf("Number value %d in a two-dimensional size is:%d\n",num,*arr[num]);

これはエラー メッセージです。

Unhandled exception at 0x013137b2 in LB_12.exe: 0xC0000005: Access violation reading location 0xabababab.

ミッションの説明とエラーメッセージが次の画像に表示されます。なにが問題ですか?プログラムに値を出力させたい場合は、別の配列を作成して値をコピーする必要がありますか?

ミッションの説明とエラーメッセージ

これは私のコードです

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void SortArray(int **arr,int rows,int columns,int num);
void freemalloc ( int **arr,int rows);

void main()
{
    int **arr;
    int i,j,rows,columns,num;
    printf("Please enter the size of 2D array(rows ,cols)");
    scanf("%d %d",&rows , &columns);
    arr=(int **)malloc(rows*sizeof(int *)); // Allocate array of pointers
    if(!arr) // Terms - if there is not enough memory,print error msg and exit the program.
        {
            printf("alloc failed\n");
            return ;
        }
    for(i=0; i<rows; i++)
        arr[i]=(int *)malloc(columns*sizeof(int)); // Allocate memory for each row
    printf("Please fill the 2D array\n");
    for(i=0 ; i<rows ; i++)
        {
            for (j=0 ; j<columns ; j++)
            {
                printf("row:%d columns:%d\n", i,j);
                scanf("%d" , &arr[i][j]);
            }
        }

    printf("Please enter a postive number: ");
    scanf("%d",&num);
    SortArray(arr,rows,columns,num);
    freemalloc(arr,rows);

system("pause");
return;
}
void SortArray(int **arr,int rows,int columns,int num)
{
    int i,j,temp; 
    for(i=0 ; i<rows ; i++ ) // Bubble sort for sorting the 2d array
        {
            for(j=0 ; j<i-1 ; j++ )
            {
                if(arr[i][j]>arr[i][j+1])
                {
                    temp=arr[i][j];
                    arr[i][j]=arr[i][j+1];
                    arr[i][j+1]=temp;
                }
            }
        }
    if(*arr[rows*columns]<num)
        {
            printf("No solution,The maximum value is:%d\n",arr[rows*columns]);
        }
    else
    {
        printf("Number value %d in a two-dimensional size is:%d\n",num,*arr[num]);
    }
}
void freemalloc ( int **arr,int rows)
{
    int i;
    for (i=0 ; i<rows ; i++) // Loop for free the array of pointers
    {
            free(arr[i]); // free each seprate row
    }
    free(arr);
}
4

2 に答える 2

0

私の賭けは:

printf("Number value %d in a two-dimensional size is:%d\n",num,*arr[num]);

いくつかの数値を求めて、それを変数 num に入れます。番号 num が num 番目の行の最初の番号であると考える理由は何ですか?

このコードにはおそらくもっと多くの問題があるかもしれません。EDIT:
*arr[num]右から左に評価されます。演算子[]よりも優先されます。 だから最初に。その結果は逆参照されます。num は行のように扱われるため、十分な行がない場合は、配列を超えているため、メモリ違反が発生します*
does arr[num]*(arr[num])

于 2013-09-21T15:59:40.507 に答える