ldap_modify_s导致访问冲突,其中ldap_add_s使用相同的代码

ldap_modify_s导致访问冲突,其中ldap_add_s使用相同的代码,ldap,Ldap,我看到了另一个例子,但它并没有解决我的问题。因此,下面的代码示例按原样工作。但是,如果我将ldap_add_s命令更改为ldap_modify_s命令,并将ldap_MOD_add更改为ldap_MOD_替换为Martin,而不是Marshall Fielding,那么其余的应该什么都不做,我会遇到访问冲突: LDAPAPP.exe中0x74c923b6处的未处理异常:0xC0000005:访问冲突读取位置0x00000002 这对我来说毫无意义,因为我没有更改任何内容以导致访问冲突,它一定是来

我看到了另一个例子,但它并没有解决我的问题。因此,下面的代码示例按原样工作。但是,如果我将ldap_add_s命令更改为ldap_modify_s命令,并将ldap_MOD_add更改为ldap_MOD_替换为Martin,而不是Marshall Fielding,那么其余的应该什么都不做,我会遇到访问冲突:

LDAPAPP.exe中0x74c923b6处的未处理异常:0xC0000005:访问冲突读取位置0x00000002

这对我来说毫无意义,因为我没有更改任何内容以导致访问冲突,它一定是来自ldap调用。救命啊

char * myDn = "acctName=judy,ou=players,o=myCompany";
char *classValues2[] = { "ejCharacter", NULL};
char *cidValues[] = { "12", NULL };
char *firstValues[] = { "Marshall", NULL };
char *lastValues[] = { "Fielding", NULL };
char *genValues[] = { "CS_Male2", NULL };
char *ouValues[] = { "players", NULL };

objClass2.mod_op =  LDAP_MOD_ADD;
objClass2.mod_type = "objectClass";
objClass2.mod_values = classValues2;

charID.mod_op = LDAP_MOD_ADD;
charID.mod_type = "ejCharID";
charID.mod_values = cidValues;

first.mod_op = LDAP_MOD_ADD;
first.mod_type = "ejCharNameFirst";
first.mod_values = firstValues;

last.mod_op = LDAP_MOD_ADD;
last.mod_type = "ejCharNameLast";
last.mod_values = lastValues;

gen.mod_op = LDAP_MOD_ADD;
gen.mod_type = "ejCharGenData";
gen.mod_values = genValues;

ou.mod_op = LDAP_MOD_ADD;
ou.mod_type = "ou";
ou.mod_values = ouValues;

NewChar[0] = &objClass2;
NewChar[1] = &charID;
NewChar[2] = &first;
NewChar[3] = &last;
NewChar[4] = &ou;
NewChar[5] = &gen;

printf("myDN %s\n", myDn);
printf("OKAY TRYING THE ADD");

retVal = ldap_add_s(ldap_session, myDn, NewChar);
Per:

LDAPMOD数组必须以NULL结尾

您很有可能通过将数组大小增加1并添加以下内容来解决此错误:

NewChar[6] = NULL;