标签: std

C中的函数free()对我不起作用

我一直试图释放通过malloc()使用分配的内存free().

它的一些结构是免费的,但它们保留了它们的方式,它们也与它们的孩子保持联系.它也永远不会释放(gRootPtr)二叉树的根.

我正在使用Xcode来查明二叉树使用的内存是否已被释放,并使用if语句.

我用来释放内存的代码:

void FreeMemory(InfoDefiner *InfoCarrier)
{
    if ((*InfoCarrier) != NULL) {
        FreeMemory((&(*InfoCarrier)->left));
        FreeMemory((&(*InfoCarrier)->right));
        free((*InfoCarrier));
    }
}
Run Code Online (Sandbox Code Playgroud)

代码我用来查看内存是否已被释放.

if (gRootPtr != NULL) {
    return 1;
}
else{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c malloc free std

-2
推荐指数
2
解决办法
1万
查看次数

如何在std :: string到达字符串结尾时"重置"它的查找成员函数

有没有办法我可以"重置"函数std :: string :: find再次查看字符串的开头类似于在i/o流中设置文件指针?谢谢.

c++ string stl std

-2
推荐指数
1
解决办法
317
查看次数

为什么empty()std :: basic_string c_str()不是nullptr?

(在周日晚上思考)

在我编写的函数中,我倾向于依赖于相同字符串的两个const char*和模板化内联const std::basic_string<>&变体.但我真的好奇为什么c_str()空字符串不是nullptr.

大多数C++程序员现在忽略const char*指针作为C代码,但我认为它非常C++,因为字符串被null终止和连续,并将继续这样.但是如果使用自定义分配器,那么使用const std::string&参数编写的所有代码都是没有意义的(除非只有标头).

因此,您真正的选择(如果您想要多才多艺)是老式字符指针或内联模板化函数,可以支持各种std::basic_string自定义分配器或特征.这会强制您内联模板化函数,因为您无法正确预测模板参数.

现在我的问题是:为什么空字符串不为c_str()返回nullptr?作为字符串函数中的最小公分母,特别是对于只读访问而言,const char*不是const std::string&因为约束而被模板化的.返回一个指向任何东西的指针,特别是当没有字符串赋值时......在我看来很奇怪.

或者我是不是太疯狂了呢?总是担心两者const char*和模板const std::basic_string<char, ..., ...>&对手.如果std::string().c_str()在哪里nullptr,我不担心.但我必须自己防范空弦,因为c_str()它不可靠std::basic_string.

PS:我知道旧的字符串函数在与空指针一起使用时会崩溃,但是在任何地方使用字符串之前,可以轻松地测试有效指针和非空的第一个字符.

PPS:我在这里谈论理智的以空字符结尾的字符串,而不是std::basic_string特别支持的包含空值的伪字符串.

问题重复:为什么不std::string().c_str()应该指向内存?它应该是nullptr.不像std::string().c_str("")是一个空字符串,需要\0尾随它.所以它实际上指向有效的内存.(如果您不理解字符串/指针是如何工作的,请不要费心回答.这需要一些类似C的理解.)

c++ string stl std c++11

-2
推荐指数
2
解决办法
4668
查看次数

C++程序在Linux中运行,但不在Windows中运行

我正在为大学写这个课程并且一直有问题.我写了在ubuntu中使用代码块,它运行良好没有错误或任何东西.但当我在Windows上运行它在codeblocks上它崩溃并且我一直得到相同的错误"在抛出'std :: bad_alloc'的实例后终止调用什么<>:std :: badalloc'然后它停止工作.任何帮助都将是谢谢!谢谢Ron

main.cpp中

 #include <iostream>
#include "set.h"
using namespace std;

int main()
{

Set Set1;
List List1;
List1.header();


int choice = 0;
int value = 0;
cout<<"Press 1 to use a list or press 2 for a set"<<endl;
cin>>choice;
if(choice == 1) //List
{

    while(choice != 4)
        {
            value = 0;
            List1.menu();
            cin>>choice;
            switch(choice)
            {
                case 1:cout<<"Please enter value"<<endl;
                       cin>>value;
                       List1.set_value(value);
                break;
                case 2:List1.print_list();
                break;
                case 3:List1.test_copy_constructor();
                break;
            }

        }
}

else if(choice == 2) //Set
{ …
Run Code Online (Sandbox Code Playgroud)

c++ linux windows string std

-2
推荐指数
1
解决办法
647
查看次数

什么是std ::与cout和endl一起使用?

我最初使用的程序,using namespace std;但我听到很多人说这是糟糕的编程习惯所以我想打破这个习惯.我将我的程序中的所有couts和endls 更改为std::coutstd::endl;.

除了coutendl什么使用命名空间std?例如:我的程序中有向量和字符串; 他们用std::吗?

如果不是太长或太麻烦,列表会很好.

c++ std

-2
推荐指数
1
解决办法
286
查看次数

区别btw gets,scanf('%s'),getline

我在quora上阅读了这个问题,并读到Google在其一次采访中问了这个问题,

函数之间有什么区别:scanf(“%s”),gets和getline

任何人都可以提供详尽的清单及其解释。

c c++ std

-2
推荐指数
1
解决办法
2030
查看次数

c ++ std :: string'=='运算符和Compare方法返回Not equal value to equal string

在此输入图像描述

motion->bone_frames[0].name == model->bones[0].bone_name//it return 0 . it should be 1

motion->bone_frames[0].name.Compare(model->bones[0].bone_name)//it return 1 . it should be 0

wcscmp(motion->bone_frames[0].name.c_str(), model->bones[0].bone_name.c_str()) //it return 0  it should be 0 correct
Run Code Online (Sandbox Code Playgroud)

我无法理解std :: string比较函数为什么wcscmp有不同的结果.

我能知道为什么这些结果不同吗?长度不同的原因是什么?

c++ string return std

-2
推荐指数
1
解决办法
1352
查看次数

在C++中显示浮点类型的二进制表示

请考虑以下用于整数类型的代码:

template <class T>
std::string as_binary_string( T value ) {
    return std::bitset<sizeof( T ) * 8>( value ).to_string();
}

int main() {
    unsigned char a(2);
    char          b(4);

    unsigned short c(2);
    short          d(4);

    unsigned int   e(2);
    int            f(4);

    unsigned long long g(2);
    long long h(4);

    std::cout << "a = " << +a << " " << as_binary_string( a ) << std::endl;
    std::cout << "b = " << +b << " " << as_binary_string( b ) << std::endl;
    std::cout << "c = …
Run Code Online (Sandbox Code Playgroud)

c++ std binary-data bitset

-2
推荐指数
1
解决办法
1138
查看次数

错误:'reverse' 未在此范围内声明

我创建了一个程序来反转一个句子:

#include <iostream>
#include <string>   

using namespace std;

int main()
{
    string sentence;
    string reversedSentence;
    int i2 = 0;

    cout << "Type in a sentence..." << endl;
    getline(cin, sentence);

    reversedSentence = sentence;
    reverse(reversedSentence.begin(), reversedSentence.end());

    cout << sentence << endl;
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试用 MinGW G++ 编译它时,会发生这种情况:

SentenceReverser.cpp: In function 'int main()':
SentenceReverser.cpp:16:5: error: 'reverse' was not declared in this scope
   16 |     reverse(reversedSentence.begin(), reversedSentence.end());
      |     ^~~~~~~
Run Code Online (Sandbox Code Playgroud)

我不知道我做错了什么。帮助?

c++ reverse mingw g++ std

-2
推荐指数
1
解决办法
2865
查看次数

为什么向量中的第 -1 个索引始终为 0?

有人能说为什么这段代码打印 0 吗?我认为它会显示一些例外情况。

int main()
{
    std::vector<int> v;
    v.push_back(8);
    cout << v[-1];
}
Run Code Online (Sandbox Code Playgroud)

c++ vector std

-2
推荐指数
1
解决办法
61
查看次数

标签 统计

std ×10

c++ ×9

string ×4

c ×2

stl ×2

binary-data ×1

bitset ×1

c++11 ×1

free ×1

g++ ×1

linux ×1

malloc ×1

mingw ×1

return ×1

reverse ×1

vector ×1

windows ×1