1

16 進配列にバッファー用のスペースを割り当てると、コードが壊れ続けます (つまり、アクセス違反の例外がスローされます)。

main で 16 進配列を 2 つ星ポインターとして宣言し、参照渡しします。

main.cpp のどこかに

char ** hexArray = nullptr;

fileio.cpp のどこかに

void TranslateFile(char * byteArray, char **& hexArray, int numberOfBytes, char buffer[])
{
int temp = 0;

//Convert bytes into hexadecimal
for(int i = 0; i < numberOfBytes; i++)
{
    //Convert byteArray to decimal
     atoi(&byteArray[i]);

     //Set temp equal to byteArray
     temp = byteArray[i];

     //Convert temp to hexadecimal and store it in hex array
     itoa(temp, buffer, 16);

     //Allocate room for buffer
     hexArray[i] = new char[strlen(buffer) + 1]; //CODE BREAKS HERE

     //Copy buffer into newly allocated spot
     strcpy(hexArray[i], buffer);
}
}
4

5 に答える 5

3
char ** hexArray = nullptr;

hexArray初期化されていません。

hexArray[i] = new char[strlen(buffer) + 1]; //CODE BREAKS HERE

を逆参照hexArrayしますが、初期化されていないため、プログラムは未定義の動作を引き起こします。それを初期化する必要があり、コード サンプルごとに、少なくとも numberOfBytes要素を指している必要があります。

hexArray = new char *[numberOfBytes];

現在hexArrayは、初期化されていないポインターを指す初期化されたnumberOfBytesポインターです。

于 2013-03-07T03:12:08.410 に答える
1

You don't allocate space for the hexArray itself. What you done in

 //Allocate room for buffer
 hexArray[i] = new char[strlen(buffer) + 1]; //CODE BREAKS HERE

is allocating memory for elements of the hexArray.

So you should put the code:

hexArray = new char*[numberOfBytes];

before entering the for loop.

于 2013-03-07T03:14:56.443 に答える
1

外側の配列にメモリを割り当てる必要があります。あなたの例から、それはおそらく次のとおりです。

hexArray = new char *[numberOfBytes];
于 2013-03-07T03:12:42.437 に答える
1

char **の配列char *または へのポインタchar *です。いずれにせよ、実行する前に何かを割り当てる必要がありますhexArray[i]

main.cpp のどこかに:

hexArray = new char *[NUM_CHAR_PTRS];

後で...

hexArray[i] = new char[strlen(buffer) + 1];
于 2013-03-07T03:13:23.097 に答える
0

Have numberOfBytes entries in hexArray already been allocated?

Use strnlen instead of strlen or better still std::string. Do you know whether buffer is terminated or not (that is, is it part of TranslateFile's contract)?

于 2013-03-07T03:15:03.793 に答える