Visual studio 运行-Time Check Failure #2 - 变量 'temp' 周围的堆栈已损坏

Visual studio Run-Time Check Failure #2 - Stack around the variable 'temp' was corrupted

我已经编写了一个函数来对元素进行分区,以用于对 cstrings 数组进行排序的快速排序算法

void partition(char words[][MAXWORDLEN + 1], int start, int end, int& partitionIndex) {
char pivot[MAXWORDLEN + 1]; //choose last element to be the pivot
strcpy(pivot, words[end]);
partitionIndex = start; //partition index is initalized to the first index
for (int i = start; i < end; ++i) { //iterate through the array
    if (strcmp(words[i], words[end]) < 0) {
        char temp[MAXWORDLEN];
        strcpy(temp, words[i]); //swap the element with the element corresponding to the partition index
        strcpy(words[i], words[partitionIndex]);
        strcpy(words[partitionIndex], temp);
        partitionIndex++;
    }
}
cout << end << endl;
char temp[MAXWORDLEN + 1];
strcpy(temp, words[end]);
strcpy(words[end], words[partitionIndex]);
strcpy(words[partitionIndex], temp);

}

但是,当我 运行 程序时,我遇到 运行 时间检查失败。 MAXWORDLENGTH 为 6,数组中所有单词的长度都在 4-6 个字符之间。所以我很困惑为什么变量 temp 似乎无法复制到索引 partitionIndex

处的单词

改变这个:

char temp[MAXWORDLEN];

对此:

char temp[MAXWORDLEN + 1];

因为主元数组也有这个大小。


所以当 temp 的大小为 6 并且它包含的单词有 6 个字符时,空终止符将被覆盖,这意味着复制将失败并调用未定义的行为。我们真的不知道通过复制将哪些垃圾值写入目标数组(如果有的话)。