首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >信号SIGSEGV分割故障。__strlen_avx2 ()在./sysdeps/x86_64/Multiarch-strlen-avx2.S:65

信号SIGSEGV分割故障。__strlen_avx2 ()在./sysdeps/x86_64/Multiarch-strlen-avx2.S:65
EN

Stack Overflow用户
提问于 2022-05-03 19:08:43
回答 1查看 865关注 0票数 2

我已经转换了我的旧代码:

代码语言:javascript
复制
#define MAX_LOG_MSG 2048

在*.h文件中

代码语言:javascript
复制
typedef void (*LogMessageFunction)(char *);

在*.cpp文件中

代码语言:javascript
复制
static LogMessageFunction m_MessageFunctions[LastLogCount] = {NULL};

void DebugMsg(const char* fmt, ...)
{
    if (!m_MessageFunctions[DebugLevel]) return;

    char msgBuffer[MAX_LOG_MSG];
    va_list argList;
    va_start(argList, fmt);
    vsnprintf(msgBuffer, MAX_LOG_MSG, fmt, argList);
    va_end(argList);
    
    m_MessageFunctions[DebugLevel](msgBuffer);
}

变成动态分配的字符*

代码语言:javascript
复制
void DebugMsg(const char* fmt, ...)
{
    if (!m_MessageFunctions[DebugLevel]) return;

    va_list argList;
    va_start(argList, fmt);
    size_t size = vsnprintf(NULL, 0, fmt, argList) + 1;
    va_end(argList);
    char* msgBuffer = new char[size];

    va_start(argList, fmt);
    vsnprintf(msgBuffer, size, fmt, argList);
    va_end(argList);

    m_MessageFunctions[DebugLevel](msgBuffer);
    delete[] msgBuffer;
}

窗户上现在一切都很好。

线程1 "ATETests“接收信号SIGSEGV,分割故障。__strlen_avx2 ()在../sysdeps/x86_64/multiarch-avx2.S: 65 ./sysdeps/x86_64/multiarch-strlen-avx2.S:没有这样的文件或目录。

据我所见,这与缓冲区或字符串的大小有关吗?你能帮上忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 19:27:23

我会用它做一个不同的模板,然后使用一个std::unique_ptr<char[]>来分配内存:

代码语言:javascript
复制
#include <memory>

template<class... Args>
void DebugMsg(const char* fmt, Args&&... args)
{
    if (!m_MessageFunctions[DebugLevel]) return;

    int size = std::snprintf(nullptr, 0, fmt, args...) + 1;
    if (size < 1) return; // check for error

    auto msgBuffer = std::make_unique<char[]>(size);

    size = std::snprintf(msgBuffer.get(), size, fmt, args...);
    if (size < 0) return; // probably unnecessary

    m_MessageFunctions[DebugLevel](msgBuffer.get());
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72104337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档