首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理数组队列

处理数组队列
EN

Stack Overflow用户
提问于 2012-09-20 20:15:08
回答 3查看 181关注 0票数 0
代码语言:javascript
复制
#ifndef UNICODE
#define UNICODE
#endif

#include <iostream>
#include <Windows.h>
#include <queue>

using namespace std;

void addSomeContent(queue<TCHAR*> &s)
{
    static int counter=0;
    TCHAR buffer[30];

    wsprintf(buffer,TEXT("foo%d"),counter);

    s.push(buffer);
    counter++;

    if(counter < 10)
    addSomeContent(s);
}


int main (void)
{
    queue<TCHAR*> strings; 

    addSomeContent(strings);

    while(!strings.empty()) 
    {   
        wcout<<strings.front()<<endl;
        strings.pop();
    }

    system("pause");
    return (0);
}

输出:

foo0 ♦

所需:

foo0 foo1 。 。 。 foo9

我哪里错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-20 20:32:21

原因是您的buffer是堆栈上的本地变量。一旦您离开该函数,它将过期。

如果您真的想这样做,请在堆TCHAR *buffer = new TCHAR[30];上创建它。过了一段时间后,你可能需要delete[]

但是,我认为使用一些内置类型或stl容器来代替操作指针将使您的代码更加可读性和可管理性。

票数 4
EN

Stack Overflow用户

发布于 2012-09-20 20:29:44

当你这样做的时候

代码语言:javascript
复制
s.push(buffer);

您可以多次将指向buffer的指针添加到队列中(在最好的情况下,您将得到最后一个字符串的相同副本),但是当您到达addSomeContent的末尾时,该指针将是无效的(如果没有分段冲突,则给出一个随机内容)。应该将字符串的副本添加到队列中。

票数 1
EN

Stack Overflow用户

发布于 2012-09-20 20:38:46

问题是TCHAR指针在堆栈中。为了将指针从函数中传递出去,您应该在堆中分配它(使用new )。

但是为什么要使用TCHAR而不是std::string呢?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12520232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档