ureyishere 2009-11-18 17:14
浏览 249
已采纳

Lijnux GCC 编程 “段错误”

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

int main()
{
    int count = 10;
    int *ipcou = 0;
    *ipcou = count;
    printf("%d\n", *ipcou);
    return 0;
}

 再简单不过的C程序,出现段错误,一般多错误是内存溢出。可以肯定是 *ipcou = count; 这一句出现了问题。但是可以肯定的是数组或malloc之后可以消除这个错误,难道GCC 在编译的时候是不给指针分配空间吗?

Linux编程经验很少,望大侠们指教。

  • 写回答

1条回答 默认 最新

  • rednaxelafx 2009-11-18 22:31
    关注

    这段代码里,ipcou自身是有分配空间的,其中的值为0(意味着*ipcou指向的是0)。
    ipcou = count意味着从变量ipcou取出值(为0),以该值为赋值的目标地址,然后把count的值赋值到那里去。地址0所在的内存页是受保护的,向它写入就会引发segfault。
    如果有int *ipcou = (int
    )malloc(...),则在malloc成功获取空间的时候,ipcou的值就会是有效的内存地址,后面的赋值自然就没问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料