我的代码存在很大问题。我不明白为什么会发生这种情况并且不知道如何解决它。
基本上我试图定义一个指向字符的指针数组,其中指针数组的每个元素都存储一组不同的字符。
类构造函数: (注意:size是一个整数,指定我的指针数组应该有多大,用户可以定义它)
storeElements = new char*[size];
假设size = 3,现在storeElements应该是一个能指向3个独立字符串的指针数组。
*storeElements = "one";
*(storeElements+1) = "two";
*(storeElements+2) = "three";
当我在分配它们后直接打印这些值时,它们会打印正确的字符串,但是在我的代码中,在其他函数中以及在声明了许多其他变量之后,我打开了一个输出文本文件,* storeElements类变得糊里糊涂。
比如说,如果我尝试这样做(稍后在我的代码中):
cout << *(storeElements+2) << endl;
而不是打印&#34;三&#34;它可能打印&#34;一个&#34;或者根本没有。
动态内存分配在这里遇到了问题,因为我正在从文本文件中读取文件,有时该文本文件的内容存储在* storeElements 的元素中,而我根本没有将它们分配给* storeElements
请帮助我更好地了解如何解决此问题。我在代码中投入了大量的时间和精力,对此非常不满。感谢您抽出时间来帮助我。
答案 0 :(得分:1)
很简单,你已经为指针分配了内存,但是你没有为它们指针指向的char数组分配内存。
这行代码很完美。
storeElements = new char*[size];
现在,如果你看一下这行代码:
*storeElements = "one";
你还没有分配任何内存来存储&#34;一个&#34;。你应该这样做是在分配值之前分配内存。类似的东西:
*storeElements = new char[strlen("one")+1];
strcpy_s(storeElements[0], strlen("one")+1, "one");