【问题标题】:C - SIGSEGV Whilst trying to append to GTKTextBufferC - SIGSEGV 在尝试附加到 GTKTextBuffer 时
【发布时间】:2020-07-15 21:29:28
【问题描述】:

我正在尝试编写一个函数来将给定的文本字符串附加到我的 GTKTextBuffer 的末尾,但是我遇到了我认为是内存分配问题的问题?

所以,这是我编写的用于追加的函数:

void append_to_log(GtkTextBuffer *buffer, char* strToSave) {

    GtkTextIter *iter;

    gtk_text_buffer_get_end_iter(buffer, iter);

    gtk_text_buffer_insert(buffer, iter, strToSave, strlen(strToSave));

}

当我尝试启动我的程序,并使用该函数添加“记录开始...\n”消息时...

append_to_log(loggingBuffer, "Logging started... \n");

...我收到此错误:

/home/csc/CLionProjects/SDS-CW/GUIs/Server/cmake-build-debug/SDS-CW
*** stack smashing detected ***: <unknown> terminated

但是,当我尝试手动添加第一行时,它工作正常:

gtk_text_buffer_set_text(loggingBuffer, "Logging started... \n", 20);

所以我尝试手动设置初始行,然后添加新行...

gtk_text_buffer_set_text(loggingBuffer, "Logging started... \n", 20);
append_to_log(loggingBuffer, "Logging continued... \n");

...我收到分段错误。

任何想法我哪里出错了,我可以如何解决这个问题?

非常感谢。

【问题讨论】:

    标签: c memory segmentation-fault append gtk


    【解决方案1】:
    GtkTextIter iter;
    gtk_text_buffer_get_end_iter(buffer, &iter);
    

    您需要提供指向现有 GtkTextIter 实例的指针,而不是指向无处的指针,就像在您的代码中一样。

    【讨论】:

    • 啊,是的,它排序了!我的愚蠢错误啊哈。谢谢!我会尽快接受答案。
    猜你喜欢
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2017-08-29
    • 2010-11-13
    相关资源
    最近更新 更多