我有以下代码:
#include <openssl/bn.h>
#include <openssl/rsa.h>
unsigned char* key;
RSA* rsa = RSA_new();
rsa = RSA_generate_key(1024,65537,NULL,NULL);
//init pubkey
key[BN_num_bytes(rsa->n)] = '\0';
BN_bn2bin(rsa->n, key);
printf("RSA Pub: %s\n", key);
RSA_free( rsa );
rsa = NULL;
调试器告诉我线上有一个问题“访问冲突写入位置”
key[BN_num_bytes(rsa->n)] = '\0';
如果我注释掉那一行,问题就会转移到
BN_bn2bin(rsa->n, key);
关于如何解决此问题的任何建议都很好。
最佳答案
因为 key
没有指向任何东西,而且你已经用数组符号下标引用了它,所以这就是源代码。 key如何获取value。您正在覆盖或践踏其他一些不属于您的内存块,因此被 Windows 捕获的“访问冲突”。仔细检查您的代码并确保该变量已被 malloc 或 new。
作为旁注,为了您的理智,最好这样声明
unsigned char *key = NULL;
这样,如果您尝试访问 key
而不是 malloc'd/new',您将收到内存异常错误(很容易确定为这个错误)。认为它使调试更容易。
希望对您有所帮助, 此致, 汤姆。
关于c++ - 访问违规写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834164/