2012-03-15 40 views
0

私はポインタの暗闇の中で失われています!ここに私の問題は、const unsigned char *文字列またはconst char *への変換/ *

私は非常に奇妙であり、私は機能の一つを制御することができますので、私は再設計する必要はありません言ってください。 これは、Linux Ubuntu 11.04でandroid-ndkr7を使用してコンパイルされています。これは、純粋にネイティブのアプリケーション(またはサービス)は、アンドロイド携帯電話で実行されます。私は私のクラス/機能を確認するためにGoogleのテストを使用しています。 最初の関数(私のテストクラス)はunsigned char *を宣言しなければならず、2番目の関数に渡して出力(crypt :: encryptBuffer)に渡し、encryptは宣言された変数を取り、そのメモリを割り当ててその値が出力として配置される第3の関数です。

Crypt.h

class Crypt 
{ 
public: 

    Crypt(); 
    ~Crypt(); 

    bool encryptBuffer(const unsigned char* inDecryptBuffer, const int inputSize, unsigned char** outEncryptBuffer, int* pOutSize); 

}; 

#endif 

Crypt.cpp

#include "Crypt.h" 
#include "pan/crypt.h" 

static unsigned char HydraEncryptionKey[] = {0x17, 0x43, 0x9B, 0x55, 0x07, 0xAE, 0x73, 0xB1, 0x32, 0x10, 0xE0, 0x22, 0xD9, 0xC7, 0xF2, 0x3B}; 

bool AccCrypt::encryptBuffer(const unsigned char* inDecryptBuffer, const int inputSize, unsigned char** outEncryptBuffer, int* pOutSize) 
{ 
    int encryptedSize; 
    pan::aes128_cbc enc(HydraEncryptionKey); 

    // see how long the encrypted data will be and allocate space for the data 
    encryptedSize = enc.output_len(inputSize); 

    *outEncryptBuffer = (unsigned char*)malloc(encryptedSize + 4); 

    enc.encrypt(inDecryptBuffer, *outEncryptBuffer, inputSize); 
    return true; 
} 

CryptTest.cpp

#incude "Crypt.h" 
#include <gtest/gtest.h> 

#define CHECK_COND(X, a, b, c) { \ 
if(X) \ 
{ \ 
    printf("FAIL: %s\n", c); \ 
    printf("Press any key to continue");\ 
    getc(stdin);\ 
}\ 
else \ 
{ \ 
    printf("PASS: %s\n", c); \ 
}\ 
} 

#define EXPECT_EQ(a,b,c) CHECK_COND((a != b), a, b, c) 

const char* decBuff = "something"; 
const int inputSize = 10; 
unsigned char* encBuffTest = NULL; 
int pOutsize = 0; 

class cryptTester : public testing::Test 
{ 
    protected: 
    virtual void SetUp() 
    { 
     cryptTest = new Crypt(); 
     cryptTest->encryptBuffer((const unsigned char*)decBuff, inputSize, &encBuffTest, &pOutsize); 
    } 

    virtual void TearDown() 
    { 
    } 

    Crypt* cryptTest; 

}; 
TEST_F(AccCryptTest, decryptBuffer) 
{ 
    int poutSize = 0; 
    EXPECT_EQ(true, accCryptTest->decryptBuffer((const unsigned char*)encBuffTest, pOutsize, &outDecryptBuffTest, &poutSize), "decryptBuffer(valid, valid)"); 

} 

これは私が電話でそれを実行したときしかし、私は取得するには、罰金コンパイルしますセグメンテーション障害。私はadbシェルから正しくデバッグをセットアップできなかったので、これがどこで起きているのか分かりません。

助けていただけたら幸いです!

+0

あなたが完全にサポートされている開発環境の快適さでこれをデバッグすることができるはずです(たとえば、gdbの中にネイティブコードを実行しているとして、あるいはあなたのお気に入りの他のデバッガ、電話ではなくデスクトップ上)。問題が見つかったら、Android用NDKの下でコンパイルしたときに違いはありません。何が失敗しても、unsigned charとcharは関係ありません。 – mah

+0

これは明らかですが、メモリ(malloc)を割り当ててオブジェクト(新規)を作成した後に、ポインタのテストを行うことをお勧めします。 – guga

+0

-1実際のコードではありません。 'cryptTest = new Crypt();'ここで 'cryptTest'はクラス名であり、コンパイルすべきではありません。人々の時間を無駄にした。 –

答えて

0

あなたのコードはOKらしい、多分エラーがencrypt方法である:

enc.encrypt(inDecryptBuffer, *outEncryptBuffer, inputSize); 
関連する問題