当我为十六进制数组中的缓冲区分配空间时,我的代码不断出错(即,抛出访问冲突异常)。
我将十六进制数组声明为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
未初始化的指针。