当前位置:  技术问答>linux和unix

指针的疑问,大家帮我解释一下吧

    来源: 互联网  发布时间:2016-02-16

    本文导语:  1:定义一个结构,可以先不管结构是什么内容  struct atmel_uart_port {        struct uart_port uart; /* uart */        struct clk *clk; /* uart clock */        unsigned short suspended; /* is port suspended? */        sh...

1:定义一个结构,可以先不管结构是什么内容 

struct atmel_uart_port { 
      struct uart_port uart; /* uart */ 
      struct clk *clk; /* uart clock */ 
      unsigned short suspended; /* is port suspended? */ 
      short use_dma_rx; /* enable PDC receiver */ 
      short pdc_rx_idx; /* current PDC RX buffer */ 
      struct atmel_dma_buffer pdc_rx[2]; /* PDC receier */ 
      short use_dma_tx; /* enable PDC transmitter */ 
      struct atmel_dma_buffer pdc_tx; /* PDC transmitter */ 
}; 

struc atmel_uart_port amtel_ports[ATMEL_MAX_UART];  // 注意,这里声音的是全局变量 

2:一个函数功能 
static int __devinit atmel_serial_probe(struct platform_device *pdev) 

      struct atmel_uart_port *port;  // 注意,这里声明的是一个结构指针 
      int ret; 

      port = &atmel_ports[pdev- >id]; // 问题1:port和atmel_ports[pdev- >id]指向同一个地址还是二个不同的地方?这语句是取地址给port,还是拷贝数据给port? 
      atmel_init_port(port, pdev); 

      ret = uart_add_one_port(&atmel_uart, &port- >uart); 
      if (!ret)  
              { 
      device_init_wakeup(&pdev- >dev, 1); 
      platform_set_drvdata(pdev, port); 
      } 

      return ret; 


static int __devexit atmel_serial_remove(struct platform_device *pdev) 

      struct uart_port *port = platform_get_drvdata(pdev); // 问题2: 同问题1 
      struct atmel_uart_port       *atmel_port = (struct atmel_uart_port *) port; // 问题3:同问题1 
      int ret = 0; 

      device_init_wakeup(&pdev- >dev, 0); 
      platform_set_drvdata(pdev, NULL); 

      if (port) { 
      ret = uart_remove_one_port(&atmel_uart, port); 
      kfree(port);  // 最终问题:假设只是指向同一个地址,port和全局变量amtel_ports是同一个地址,那么这里有必须释放吗?如果不是同一个地址,那么问题又来了,我们声明 char a[100]; char *b = &a[60];这里可是指向同一个地址啊?难道结构与数组指针不一样吗? 
      } 

      return ret; 
}

|
问题1:指的是同一个地址。
释放不释放是看自己的设计。按照你这个函数的意思是退出的意思,应该需要释放。

|
struct uart_port *port = platform_get_drvdata(pdev); // 问题2: 同问题1  
///////////////////////////////////////////////////////////////////////////
platform_get_drvdata(pdev); 这个函数从哪儿来的。它与全局数组有关系吗?如果它里面调用了malloc呢?

Linux驱动不懂,我只是随变问问

|
动态的才需要释放,指针赋值是指向同一个地方,kfree做了什么我不清楚

|
问题1:两者是指向同一地址,是取地址而非拷数据,,,当然指向同一地址,访问他们得到的数据是同一个了

释放的是动态从堆分配而来的内存空间,,比如通过malloc,,new等等  所以你这里没有必要释放

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • gcc编译CORBA程序如何关闭智能指针转换为普通指针的警告
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 指向类成员函数的指针其实并非指针
  • 谁说java没指针,我觉得全是指针才对
  • 深入解析C++中的指针数组与指向指针的指针
  • 一个用指针传递内存的问题(如果传进去的是三重指针确不行)
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 关于free指针的指针分量
  • C语言中常量指针与指针常量区别浅析
  • C语言中有指针,因此C语言可以创建链表,那么Java语言没有指针,那Java是否可以创建链表呢?
  • C++中指向对象的常指针与指向常对象的指针详解
  • 关于指针变量,struct 变量,指针使用的一些疑惑,望高手指教
  • 深入理解数组指针与指针数组的区别
  • 深入解析函数指针与返回函数的指针
  • 指向变量的常指针与指向常变量的指针详细解析
  • 结构指针类型强制转换
  • 请问return语句会执行哪些操作?在函数中return一个已分配内存的指针,该指针所占用的内存会释放吗?
  • 请问如何在linux (redhat)下传递一维数组指针?
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句? iis7站长之家
  • 利用函数指针的好处是什么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3