vsprintf中的分段错误()

时间:2015-07-31 13:21:04

标签: c++ static stack printf

    <div class="bar bar-header bar-stable">
        <a href="javascript:history.back(-1);" class="button button-icon icon ion-ios-arrow-left"></a>
        <button class="button button-clear button-positive">Log out</button>
    </div>

<div class="clearfix"></div>

<ion-side-menus>
    <!-- Center content -->
    <ion-side-menu-content style="padding-top: 45px">
        <ion-nav-view name="categories"></ion-nav-view>
        <ion-nav-view name="products"></ion-nav-view>
        <ion-nav-view name="payments"></ion-nav-view>
    </ion-side-menu-content>

    <!-- Left menu -->
    <ion-side-menu expose-aside-when="large" style="padding-top: 45px">
        <ion-view>
            <ion-content>
                <ul class="list has-header" id="itemLists">

                </ul>
            </ion-content>
        </ion-view>
        <div class="bar bar-subfooter auto-height" style="padding:0">
            <ul class="list">
                <li class="item">Total <span class="pull-right" id="total"></span></li>
            </ul>
        </div>

        <div class="bar bar-footer">
            <div class="text-center">
                <div class="bar bar-footer bar-positive">
                    <a href="#/main/payments" class="no-underline"><div class="title">Pay</div></a>
                </div>
            </div>
        </div>
    </ion-side-menu>
</ion-side-menus>

我基本上想用writeToAnalytics( - )替换printm((---),它将数据写入文件。

我收到以下代码的Segmentation Fault。 问题是在main中调用abc :: func()。是因为func()中的str的本地存储?

1 个答案:

答案 0 :(得分:2)

func函数不正确,因为它返回了无效指针:

    static const char *  func()
    {
        std::string str = "john";
        return str.c_str();
    }

string在函数末尾被销毁,因此指针str.c_str()是一个悬空指针 - 指向一个不再存在的字符串。

解决方案只是return "john"。文学永远存在。

    static const char *  func()
    {
        return "john";
    }

或者,更好的是,只需返回string

    static string  func()
    {
        std::string str = "john";
        return str;
    }

并在呼叫站点使用abc::func().c_str()

(可能还有其他问题,但这对我来说最明显)