带有字符指针的 2D 数组的断点

Breakpoint with 2D array of char pointers

本文关键字:2D 断点 数组 指针 字符      更新时间:2023-10-16
Console application has triggered a breakpoint.

所以我有这个 2D char 指针数组,我也将其传递给其他函数,但是当我尝试删除数组时,我收到断点错误。我某些函数没有正确保存指针后面的数据。

void toevoegenL()
{
    int keuze;
    int index = 0;
    int indey = 2;
    char** text;
    text = new char *[20];
    for (int i = 0; i <20; i++)
        text[i] = new char[10];
    fillspacearray(text);
    leverancier leverancier1;
    leverancier1.levID = instellenL();

    try
    {
        invoerschermL();
        gotoxy(22, 5); std::cout << leverancier1.levID;
        texteditor(22, 6, 4,text);
        cout << text[2][3];
        chararray_to_leverancier(leverancier1, text);
        wegschrijvenL(leverancier1);
        leverancier1.levID++;
        invoerschermL();
        gotoxy(22, 5); std::cout << leverancier1.levID;
        updatenL(leverancier1.levID);
    }
    catch (const std::exception& e)
    {
        cout << "er is een fout gebeurt, u kunt opnieuw proberen"<<endl;
        system("Pause");
        invoerschermL();
        gotoxy(22, 5); std::cout << leverancier1.levID;
    }
    for (int i = 0; i <20; i++)
        delete[] text[i];
    delete[] text;
}

这是发生断点的代码段。

delete[] text[i];

尤其是这条线。

我也不确定我是否将数组正确传递给其他函数。

喜欢这个:

void print2DArray(char** A, int width, int height)

或者像这样:

void print2DArray(char**& A, int width, int height)

正如您已经意识到的那样,问题是通过了 22 而不是 20 来获得。在将来的代码中防止这种情况的一种方法是将这些值定义为常量,无论是使用 #define 还是 static const 变量(您可以在另一个 StackOverflow 问题中看到每个值的参数:静态常量与 #define)。这样,您可以执行以下操作:

#define NUMBER_OF_STRINGS 20
#define LENGTH_OF_STRING 10
char** text;
text = new char *[NUMBER_OF_STRINGS];
for (int i = 0; i <NUMBER_OF_STRINGS; i++)
    text[i] = new char[LENGTH_OF_STRING];
...
gotoxy(NUMBER_OF_STRINGS, 5);

编辑:我误解了你所说的问题在问题的评论中。我不认为其中包含删除的 for 循环是问题所在。