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

文件2.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..) 处的内存。这显然是错误的,因为这些地址不是您的——它们是为系统使用而保留的,并且包含受保护的重要信息。

目前还不清楚您实际尝试做什么,但我没有在您的代码中看到对该文件的任何引用。

Regaging malloc:在内核中你应该使用它kmalloc

于 2013-08-02T05:53:13.123 回答