Отличается между фиксированным массивом и динамическим c выделенным массивом в C ++ - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть некоторая функция 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 не работает?

...