0

ヌル ポインターの逆参照が発生し続け、カーネル パニックが発生します。これを回避する方法を教えてください。

ファイル 1.c:

int get_data()
{
     int i;
     int *mv;
     unsigned long *f;

      if ((get_data_from_other_file(&mv, &f)) {
                 return error;
       }

      for ( i=0; mv[i]; i++)
                  printf("%d %lu", mv[i], f[i]);
}

file2.c:

struct data
{
   .mv = { 1,2,3,4,5 },
   .f = {4,5,5,3,2},
}datas;

int get_data_from_other_file(int **mv, unsigned long **f)
{
        *mv = datas.mv;
         *f = datas.f;

         for ( int i =0; datas.mv[i]; i++)
               printf ("%d %lu \n", *(mv[i]), *(f[i]));

           return 0;
}

malloc や new などを使用せずに、file1 の file2 からデータにアクセスできるようにしたいだけです。

4

1 に答える 1

0

ここでprintf ("%d %lu \n", *(mv[i]), *(f[i]));は、無効なアドレスを逆参照しています。 mv[i]およびf[i]は、datas構造体に入力した数値です (1,2,3,4,..)。それらに演算子を適用することにより*、指定されたアドレス(1、2、3、4 ..)でメモリにアクセスしようとしています。これらのアドレスはあなたのものではないため、これは明らかに間違っています。これらはシステムで使用するために予約されており、保護されている重要な情報が含まれています。

実際に何をしようとしているのかは明確ではありませんが、コード内にファイルへの参照が見当たりません。

Regading malloc: カーネルでは、kmalloc代わりに使用する必要があります。

于 2013-08-02T05:53:13.123 に答える