【问题标题】:Too many initializer values and write access violation初始化器值过多和写访问冲突
【发布时间】:2019-12-28 03:58:54
【问题描述】:

我正在尝试回答一个日常编码问题。给定一个完成的多米诺骨牌图案。例如,如果输入字符数组是“r,.,.,.,l,.,.”你完成的图案应该是“r,r,.,l,l,.,.”。

两个问题。当我主要将 char 数组声明为指针时,我得到了许多初始化程序的错误。我通过将输入数组声明为数组来解决此问题。但我想使用指针。所以这是不可接受的。第二个问题。在 Dominos 函数的第 11 行,list[i] = 'r';产生写访问冲突错误。这是为什么呢?

#include <iostream>
#include <string>
#include <vector>

using namespace std;

char* Dominos(char* list, int size) {
    int i = 0, medianOffset = 0, count = 0, odd = 0, post = 0;
    if (list[i] == 'r') {
        while (list[i] != 'l') {
            list[i] = 'r';
            i++;
            count++;
            }
        medianOffset = (count - 1) / 2;
        odd = count % 2;
        post = i;
        if (odd == 1) {//putting lefts down when there is no dot seperating l and r
            for (int j = 0; j < medianOffset; j++) {
                list[i] = 'l';
                i--;
            }
        }
        else {//put a dot between l and r
            for (int j = 0; j < medianOffset; j++) {
                //list[i] = 'l';
                i--;
            }
            list[i] = '.';
        }
    }
    else if (list[i] == 'l') {

    }
    else {

    }
    return list;
}

int main() {

    char *c = { 'r', '.', '.', '.', '.', '.', '.', '.', '.', '.'};
    int size = 10;
    for (int i = 0; i < size; i++) {
        cout << c[i];
    }
    cout<<endl;
    char* list = Dominos(c, 10);

    for (int i = 0; i < 10; i++) {
        cout << *(list+i);
    }
    cout << endl;
    system("PAUSE");
    return 0;
}

【问题讨论】:

    标签: arrays pointers memory


    【解决方案1】:

    第一个问题可以通过这个assigning-char-array-to-pointer _ StackOverflow解决。

    我认为第二个问题是由于在while循环中检查i &lt; size_of_the_array失败。

    【讨论】:

    • 好的,这就是问题所在,这是一个段错误。我想。但是,它进入了垃圾数组值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 2017-08-23
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多