当我为十六进制数组中的缓冲区分配空间时,我的代码不断出错(即,抛出访问冲突异常)。

我将十六进制数组声明为main中的两星指针,并通过引用将其传递。

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);
}
}

最佳答案

char ** hexArray = nullptr;
hexArray未初始化。
hexArray[i] = new char[strlen(buffer) + 1]; //CODE BREAKS HERE

您取消引用hexArray,但是它未初始化,因此您的程序会产生未定义的行为。您需要对其进行初始化,并且根据您的代码示例,它必须至少指向numberOfBytes元素。
hexArray = new char *[numberOfBytes];

现在hexArray是一个初始化的指针,它指向numberOfBytes未初始化的指针。

09-07 00:08