У меня есть некоторая функция C ++, как показано ниже:
void fillBuffer(char* buffer, int len) {
for (int i = 0; i < len; i++) {
buffer[i] = 1;
}
}
void fillByPointerOfBuffer(char **pBuffer, int len) {
fillBuffer(*pBuffer, len);
}
void printBuffer(char* buffer, int len) {
for (int i = 0; i < len; i++) {
printf("%d", buffer[i]);
}
}
В моей основной программе я пытаюсь выполнить некоторый тест, как показано ниже: Тест 1 :
char *buffer = new char[6];
fillByPointerOfBuffer(&buffer, 6);
printBuffer(buffer, 6);
delete[] buffer;
// --> It output: 111111
Тест 2 :
char buffer[6];
fillByPointerOfBuffer( (char**)(&buffer), 6);
printBuffer(buffer, 6);
// --> Exception thrown: write access violation.
Тест 3 :
char buffer[6];
char *buffer2 = buffer;
fillByPointerOfBuffer(&buffer2, 6);
printBuffer(buffer, 6);
//// --> It output: 111111
В Test1 указатель на выделенный массив динамически c передается функции fillByPointerOfBuffer
. В Test2 указатель на массив фиксированной длины передается функции fillByPointerOfBuffer
. В Test3 указатель на переменную alias массива фиксированной длины передается в функцию fillByPointerOfBuffer
.
Я думаю, что все они должны быть одинаковыми, но почему Test1 и Test3 работали, а Test2 не работает?