gpt4 book ai didi

c++ - 添加 std::string 定义会导致访问冲突

转载 作者:行者123 更新时间:2023-11-30 00:39:34 24 4
gpt4 key购买 nike

编辑: 亲爱的 future 读者,std::string 与问题无关。这是一个未终止的数组。

简而言之,问题是将单个 std::string 的声明添加到仅包含 C 的程序会导致错误“访问冲突读取位置 0xffffffffffffffffe。”

在下面的代码中,如果声明 std::string 的行被注释掉,则程序运行到完成而不会出错。但是,如果该行留在程序中(未注释),程序将崩溃并出现上述 Acess Violation 错误。当我在 VS2010 调试器中打开正在运行的程序时,在调用 ldap_search_sA() 时发生了访问冲突。

请注意声明的 std::string 从未被使用。不必使用它来导致访问冲突。简单地声明它会导致访问冲突。

我怀疑它与 LDAP 代码无关,但我可能错了。

int main() 
{
try {
// Uncommenting the next line causes an Access Violation
// at the call to ldap_search_sA().
// std::string s;
LDAP* pLdapConnection = ldap_initA("eu.scor.local", LDAP_PORT);
ULONG version = LDAP_VERSION3;
ldap_set_option(pLdapConnection, LDAP_OPT_PROTOCOL_VERSION, (void*) &version);
ldap_connect(pLdapConnection, NULL);
ldap_bind_sA(pLdapConnection, NULL, NULL, LDAP_AUTH_NTLM);
LDAPMessage* pSearchResult;
PCHAR pMyAttributes[2];
pMyAttributes[0] = "cn";
pMyAttributes[1] = "description";
ldap_search_sA(pLdapConnection, "dc=eu,dc=scor,dc=local", LDAP_SCOPE_SUBTREE, "objectClass=computer)", pMyAttributes, 0, &pSearchResult);
} catch (...) {
printf("exception\n");
}
return 0;
}

最佳答案

    PCHAR pMyAttributes[2];
pMyAttributes[0] = "cn";
pMyAttributes[1] = "description";

属性数组应该以 NULL 结尾:

    PCHAR pMyAttributes[3];
pMyAttributes[0] = "cn";
pMyAttributes[1] = "description";
pMyAttributes[2] = NULL;

关于c++ - 添加 std::string 定义会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8559758/

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