我一直试图释放通过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) 有没有办法我可以"重置"函数std :: string :: find再次查看字符串的开头类似于在i/o流中设置文件指针?谢谢.
(在周日晚上思考)
在我编写的函数中,我倾向于依赖于相同字符串的两个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的理解.)
我正在为大学写这个课程并且一直有问题.我写了在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) 我最初使用的程序,using namespace std;但我听到很多人说这是糟糕的编程习惯所以我想打破这个习惯.我将我的程序中的所有couts和endls 更改为std::cout和std::endl;.
除了cout和endl什么使用命名空间std?例如:我的程序中有向量和字符串; 他们用std::吗?
如果不是太长或太麻烦,列表会很好.
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有不同的结果.
我能知道为什么这些结果不同吗?长度不同的原因是什么?
请考虑以下用于整数类型的代码:
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) 我创建了一个程序来反转一个句子:
#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)
我不知道我做错了什么。帮助?
有人能说为什么这段代码打印 0 吗?我认为它会显示一些例外情况。
int main()
{
std::vector<int> v;
v.push_back(8);
cout << v[-1];
}
Run Code Online (Sandbox Code Playgroud)