簡體   English   中英

訪問沖突寫入位置

[英]Access violation writing location

我有以下代碼:

#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沒有指向任何東西,並且您已經用數組符號下標引用了它,因此這就是源。 密鑰如何獲得價值。 您正在覆蓋或踩踏不是您自己的其他內存塊,因此被Windows捕獲為“訪問沖突”。 請仔細檢查您的代碼,並確保已對該變量進行了malloc或new賦值。

附帶說明一下,最好是這樣聲明

unsigned char *key = NULL;

這樣,如果您嘗試在不進行分配/更新的情況下嘗試訪問key ,則會收到內存異常錯誤(可以很容易地將其確定下來)。 考慮到它使調試容易得多。

希望這對您有所幫助,湯姆,謝謝。

您有訪問沖突,因為您嘗試使用空終止符分配密鑰,但尚未為密鑰分配任何內存。 我們需要知道您要完成的工作。

您沒有為該鍵分配任何內存-第一次使用該鍵是當您嘗試將一個元素設置為0時。

在這種情況下分配正確的內存量的正確解決方案是:

key = malloc(BN_num_bytes(rsa->n));
BN_bn2bin(rsa->n, key);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM