gpt4 book ai didi

c++ - 我该如何解决这个 C++ 访问冲突问题?

转载 作者:行者123 更新时间:2023-11-28 01:19:26 28 4
gpt4 key购买 nike

我在以下代码中遇到错误。写入 _buf 时,Visual Studio 会引发访问冲突错误。我该如何解决这个问题?

Sendn函数是一个socket发送函数。这不是问题,你可以忽略它。

看起来 _buf 指向 0x00000000

我看到的错误信息是

0xC0000005: 0x00000000 : access violation
void ?????::?????(int number, string title)
{

int titlesize = sizeof(title);
int bufsize = 4 + 4 + 4 + titlesize;

char *_buf = new char[bufsize];

_buf = { 0 };

// char _buf[bufsize] = { 0 }; (수정 내용)

int commands = 3;

int index = 0;
memcpy(_buf, &commands, sizeof(int));
index += sizeof(int);

memcpy(_buf + index, &number, sizeof(int));
index += sizeof(int);

memcpy(_buf + index, &titlesize, sizeof(int));
index += sizeof(int);
for (int i = 0; i < titlesize; i++)
{
memcpy(_buf + index, &title[i], sizeof(char));
index += sizeof(char);
}

Sendn(_buf, bufsize);

delete[] _buf;

return;
}

最佳答案

char *_buf = new char[bufsize];
_buf = { 0 };

这不会对 _buf 指向的动态分配数组进行零填充.它设置指针 _buf成为一个空指针。自 _buf是空指针,稍后尝试取消引用它会导致未定义的行为。

不需要对 _buf 指向的数组进行零填充在这种情况下,您可以简单地删除 _buf = { 0 };行。


一旦您解决了该问题,您也没有分配正确的内存量。 sizeof(title)不会给你 title 的字符数持有。它只是为您提供 std::string 的静态大小对象,通常只有一个指针和两个整数。使用 title.size()相反。

关于c++ - 我该如何解决这个 C++ 访问冲突问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com