c++ - ldap_modify 函数通过访问冲突?

标签 c++ c windows

我正在尝试使用 ldap_modify 函数修改 AD 属性值...

代码如下...

    LDAPMod *list_of_attrs[1]={0};
    char *Password[] = {"Password2"};
    LDAPMessage *result=NULL;
    int msgid;
    int rc=0;   
    LDAPMod attribute2;     

    attribute2.mod_type = (PCHAR)"Password number";
    attribute2.mod_op = LDAP_MOD_REPLACE;
    attribute2.mod_vals.modv_strvals=Password;
    list_of_attrs[0] = &attribute2;


    wchar_t dnName[100]={0};
    char *dn = "CN=test,CN=Users,DC=raja,DC=com";
    mbstowcs(dnName,dn, 100);
    PWCHAR dnNameval = (PWCHAR)malloc(sizeof(PWCHAR) * 20);
    wcscpy(dnNameval,dnName);

    msgid=ldap_modify(pLdapConnection,(const PCHAR)dnNameval, list_of_attrs);

但是,当涉及到最后一行(msgid)时,发生了访问冲突异常..

*AD2.exe 中 0x76f693ac 处出现未处理的异常:0xC0000005:读取位置 0xcccccccc 时发生访问冲突。*

请帮我解决这个问题... 提前致谢。

最佳答案

我可能从位置0xcccccccc猜测崩溃是由于未初始化的指针而发生的。阅读代码时,pLdapConnection 似乎就是该指针。

更新

阅读OP评论后,现在我可以看到问题出在第三个参数中,即引用MSDN,对条目进行的修改的空终止数组。 因此,正确的用法应该是例如

LDAPMod attribute2;     
// Initialize attribute2
............
LDAPMod *list_of_attrs[2]={&attribute2, 0};

也就是说,数组的大小应该比您要定义的条目数大一,并且最后一个数组项应该为 NULL。

关于c++ - ldap_modify 函数通过访问冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12889797/

相关文章:

c++ - C++ STL 错误中的 Prim 算法实现?

c++ - 如何在特定对象的特定方法中设置断点?

c++ - 将 opencv mat 写入标准输出

c++ - 在 C/C++ 中获取文件大小、文件扩展名并将其分配到不同名称的新文件夹中

c++ - 从 Qt 4.x (Ubuntu Linux) 迁移到 Qt 5.1 (Windows 7)

两个大数组之间的 C++ 归一化互相关

c - 主进程和启动进程之间的不对称

c - AIX 的 XL 编译器的 -qfuncsect 选项的 gcc 等效选项是什么?

java - 通过 CMD 与 Powershell 执行 Java 命令时的差异 - 由句点 ("."引起)

windows - 无法从原始流生成正确的wav文件