gpt4 book ai didi

c++ - 动态内存分配被覆盖?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:05 25 4
gpt4 key购买 nike

我的代码有很多问题。我不明白为什么会这样,也不知道如何解决。

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

类构造函数:(注意:size 是一个整数,它指定我的指针数组应该有多大,用户可以定义这个)

storeElements = new char*[size]; 

假设 size = 3,现在 storeElements 应该是一个指针数组,能够指向 3 个独立的字符串。

*storeElements = "one"; 
*(storeElements+1) = "two";
*(storeElements+2) = "three";

当我在分配这些值后直接打印这些值时,它们会打印正确的字符串,但是稍后在我的代码中,在其他函数中以及在声明了许多其他变量之后,我打开了一个输出文本文件, *storeElements 种类的变得困惑。

例如,如果我尝试这样做(稍后在我的代码中):

cout << *(storeElements+2) << endl;

它可能不会打印“三”,而是“一”或什么都不打印。

这里肯定存在动态内存分配问题,因为我正在读取文本文件,有时该文本文件的内容会存储在 *storeElements 的元素中,而我根本没有将它们分配给 *storeElements

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

最佳答案

很简单,你已经为指针分配了内存,但是你还没有为它们指针指向的字符数组分配内存。

这行代码很完美。

storeElements = new char*[size]; 

现在,如果您看一下这行代码:

*storeElements = "one"; 

您还没有分配任何内存来存储“一”。您应该在分配值之前分配内存。像这样的东西:

*storeElements = new char[strlen("one")+1];
strcpy_s(storeElements[0], strlen("one")+1, "one");

关于c++ - 动态内存分配被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32088925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com