本文共 436 字,大约阅读时间需要 1 分钟。
这里记录下调试过程中发现的测试程序中mmap fail导致的内存崩溃问题。
这是测试程序:extern int errno;pdata = mmap(NULL, /*PAGE_SIZE*page_counts*/size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED|MAP_POPULATE, -1, 0); if (pdata == MAP_FAILED) { printf(" mmap errno:%d\n",errno); }
unix系统调试可以通过包含#inlcude <errno.h>,然后引用errno这个变量,每一次调用失败系统就会自动填充,我们通过打印可以得到错误信息。
这里我们读到的错误信息是22,通过errno.h可以看到是 EINVAL,无效的参数引起的,查看系统mmap支持的参数类型,发现其flags参数不支持MAP_POPULATE,删除后运行正常。转载地址:http://fhtwb.baihongyu.com/