使用mcmodel = medium编译时,C ++程序崩溃

时间:2017-04-09 12:08:55

标签: c++ linux g++ elf

当使用mcmodel = medium编译时,

C ++程序崩溃并出现分段错误。我们在堆栈上使用了一些非常大的数组,我们需要启用中型mcmodel。 我正在使用g ++ 5.4,当我操作应用程序时,它打印出错误。请告知如何调试。

<template>

      <table id="example1" class="table table-bordered table-striped">
        <thead>
          <tr>
            <th>Username</th>
            <th>Email</th>
            <th>Name</th>
          </tr>
        </thead>
        <tbody>
          <User is="user" v-for="user in users" v-bind:user="user"></User>
        </tbody>
      </table>
</template>

<script>
  import User from './User.vue';
  export default{

    data(){
      return {
        users:[]
      }
    },
    components:{User},
    created(){
      this.fetchUsers();
    },
    methods:{
      fetchUsers(){
        this.$http.get('api/users').then(response =>{
          this.users = response.data.users;
        });
      }
    },

  }

</script>

========================================================

<template>
          <tr>
            <td> {{ user.username }}</td>
            <td> {{ user.email }}</td>
            <td> {{ user.name }}</td>
          </tr>
</template>

<script type="text/x-template">
  export default{

        props:['user']
  }

</script>

粘贴可执行文件的readelf输出 readelf -l app

strace ./app 
execve("./app", ["./app"], [/* 65 vars */]) = -1 ENOMEM (Cannot allocate memory)
--- SIGSEGV {si_signo=SIGSEGV, si_code=SI_KERNEL, si_addr=0} ---
+++ killed by SIGSEGV +++
Segmentation fault (core dumped)

内核版本: Linux rk-VirtualBox 4.4.0-64-lowlatency#85-Ubuntu SMP PREEMPT 2月20日星期二12:39:25 UTC 2017 x86_64 x86_64 x86_64 GNU / Linux

1 个答案:

答案 0 :(得分:0)

您显示的strace输出表明内核拒绝启动您的程序(不执行程序的单个指令)。

内核只是说:“这个可执行文件的构建方式使我无法运行它。”

readelf -l ./app的输出和确切的内核版本可以帮助进一步诊断。

<强>更新

第二个LOAD细分:

LOAD           0x000000000074dc50 0x0000000000d4dc50 0x0000000000d4dc50
               0x00000000000aafe0 0x00000041bf407a08  RW     200000

要求内核分配(mmap0x41bf407a08个字节。这几乎是263GiB。您的计算机没有那么多内存,或者ulimit -vulimit -d设置得太低,或两者兼而有之。