c++ - 指针有问题

标签 c++

我在显示来自几个指针字符的数据时遇到了一些问题。

int main()
{
    char *arr = new char();
    for (int t = 0;t < 10;t++)
    {
        int size = Generator::GetInstance()->Generate(arr);
        for (int generateChars = 0;generateChars < size;generateChars++)
        {
            std::cout << &arr[generateChars] << " ";
        }
        std::cout << std::endl;
    }
    return 0;
}

和生成器类

int Generator::Generate(char *ar)
{
    srand(time(NULL));
    int size = (rand() % 10)+1;
    arr = new char[size];
    for (int t = 0;t < size;t++)
    {
        int path = rand() % 4;
        switch (path)
        {
            case 0:
                arr[t] = 'U';
                break;
            case 1:
                arr[t] = 'R';
                break;
            case 2:
                arr[t] = 'D';
                break;
            case 3:
                arr[t] = 'L';
                break;
        }
    }
    arr[size] = '\0';
    *ar = *arr;
    return size;
}

这次我做错了什么,为什么每次我尝试时它都显示垃圾数据。抱歉,如果这是之前已经回答过的问题。

最佳答案

如果您尝试打印 char *,C++ 会假定它是 C 风格的空终止字符串。

看来您正在分配(并将指针传递给)一个没有终止空值的 char 数组——因此,I/O 库将在该字符后跟所有发生的垃圾数据在内存中,直到它碰巧遇到一个空字节。

一个简单的解决方案是传递 charchar &,而不是 char *,这样 I/O会将其正确解释为单个字符。

但是,这不会解决您的内存泄漏问题,这是一个单独的问题。如果你想将 C++ 用于玩具程序以外的任何东西,你应该养成 delete 的习惯 - 当你不再需要时 new 分配的任何东西。

最后,如评论中所述,您的代码非常不符合 C++ 的惯用法。像这样玩弄低级代码实际上是非常有教育意义的,但是标准库有 std::string 和各种容器,可以更容易地正确管理你的内存,所以确保您学习如何使用它们,并了解它们所基于的较低级别的功能......

关于c++ - 指针有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36272132/

相关文章:

c++ - av_read_frame 是否添加 FF_INPUT_BUFFER_PADDING_SIZE?

c++ - 多线程安全插入 vector 的最快方法是什么?

C++ 下标运算符

c++ - 为什么 C++ 代码必须包含在函数中?

c++ - 为什么模板内部的类型检查更严格?

c++ - 从顶点绘制 3D 多边形 (OpenGL/C++)

c++ - 如何获取与 Linux 桌面中的文件关联的图标、MIME 类型和应用程序?

c++ - std::less<int> 的正确参数类型是什么?

c++ - 'iter' 的名称查找更改为新的 ISO 'for' 范围

c++ - 有9次破坏怎么解释?