C++ 具有二维字符指针数组的断点

C++ 具有二维字符指针数组的断点,c++,arrays,pointers,C++,Arrays,Pointers,所以我有一个2D字符数组指针,我也在传递给其他函数,但是当我试图删除数组时,我得到了一个断点错误。我猜有些函数没有正确地将数据保存在指针后面 Console application has triggered a breakpoint. 尤其是这一行 我也不确定是否将数组正确地传递给了其他函数 像这样: delete[] text[i]; void print2DArray(char** A, int width, int height) 或者像这样: delete[] text[i];

所以我有一个2D字符数组指针,我也在传递给其他函数,但是当我试图删除数组时,我得到了一个断点错误。我猜有些函数没有正确地将数据保存在指针后面

Console application has triggered a breakpoint.
尤其是这一行

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

像这样:

delete[] text[i];
void print2DArray(char** A, int width, int height)
或者像这样:

delete[] text[i];
void print2DArray(char** A, int width, int height)

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

void print2DArray(char**& A, int width, int height)
#定义_字符串的数量20
#定义字符串10的长度
字符**文本;
text=新字符*[字符串的数量];

for(int i=0;我在这里只是猜测,但在我看来,您写入的内容超出了分配的内存范围。您在子数组中写入的字符串从不超过九个字符(九个,因此为字符串终止符留出空间)?我将使用第二种形式来传递数组。如果您已经在使用指针,则无需传递引用imho.wait,那么您是说我不能为每个子数组写入超过9个字符?这不应该是20吗?因为我是这样声明的。这是一个一维指针数组。@Semanresu
text[I]=new char[10]
说可以存储10个字符。减去1作为终止零,就有了9个字符的空间。不,问题是我试图删除的数组比现有的多,for循环直到20,delete in,而我声明它的长度为10。gotoxy也没有问题,因为它只是“转到”光标位于给定的(x,y)坐标处。我看不出您的上一个循环有任何错误。您分配了一个包含20个条目的数组,每个条目都是一个数组。然后您需要执行21次取消分配:每个子数组一次(它们的长度为10,但这与此无关)最后一个是包含子数组的数组。你把它改成了什么?你通过Valgrind运行它以确保更改不会导致内存泄漏吗?如果我没有弄错的话,那是你的原始代码。你对它做了什么更改?这会让每个人都感到困惑,因为我引用了你建议的编辑。你说你的修复方法是为每个文本条目分配20个字符,“因为for循环的长度为20。”我认为你并不真正理解C++中如何分配二维数组,所以我在这里解释了:代码的问题不是这样的。如果修改了这个固定代码,可能是因为你写的字符比每一行都要多。你可能需要每行分配超过10个,但是原因是不匹配麻木。er在for循环中。感谢您的解释,我只是大致了解了它是如何工作的。但最终错误本身是因为我试图删除的字符数组比实际存在的多(for循环直到20而不是删除时的10)。因此,要么声明20个字符数组,要么删除10个字符数组是我试图理解的观点。