动态内存分配被覆盖?

时间:2015-08-19 07:20:44

标签: c++ pointers memory dynamic constructor

我的代码存在很大问题。我不明白为什么会发生这种情况并且不知道如何解决它。

基本上我试图定义一个指向字符的指针数组,其中指针数组的每个元素都存储一组不同的字符。

类构造函数: (注意: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

请帮助我更好地了解如何解决此问题。我在代码中投入了大量的时间和精力,对此非常不满。感谢您抽出时间来帮助我。

1 个答案:

答案 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");