草庐IT

pointer_traits

全部标签

C++代码迁移: handling uninitialized pointers

根据标题,我计划移动一些十多年前为AIX开发的遗留代码。问题是代码库很大。开发人员没有在原始代码中初始化他们的指针。现在,在将代码迁移到最新服务器时,我发现了一些问题。我知道最好的解决方案是遍历所有代码并根据需要初始化所有变量。但是,我只是想知道是否有任何其他解决方案可以解决这个问题。我试过谷歌但找不到合适的答案。 最佳答案 最具预防性的长期方法是在声明它们的位置初始化所有指针,更改代码以使用适当的智能指针来管理生命周期。如果您有任何类型的单元测试,这种重构可能相对轻松。在短期内,如果您要移植到Linux,您可以使用valgrind

C++代码迁移: handling uninitialized pointers

根据标题,我计划移动一些十多年前为AIX开发的遗留代码。问题是代码库很大。开发人员没有在原始代码中初始化他们的指针。现在,在将代码迁移到最新服务器时,我发现了一些问题。我知道最好的解决方案是遍历所有代码并根据需要初始化所有变量。但是,我只是想知道是否有任何其他解决方案可以解决这个问题。我试过谷歌但找不到合适的答案。 最佳答案 最具预防性的长期方法是在声明它们的位置初始化所有指针,更改代码以使用适当的智能指针来管理生命周期。如果您有任何类型的单元测试,这种重构可能相对轻松。在短期内,如果您要移植到Linux,您可以使用valgrind

c - asprintf() : how to free the pointers?

我有这样的代码:我分配了两次log,第一个&log是否有潜在的内存泄漏?char*log=NULL;asprintf(&log,"Hello:%s",name);if(known_person==true){asprintf(&log,"%s,%s",log,",myoldfriend.");}free(log); 最佳答案 是的,代码会泄漏,因为asprintf既不检查也不尝试重用前一个指针。因此,内存只是丢失了。避免示例中问题的最佳方法是将代码重写为char*log=NULL;if(known_person==true)aspr

c - asprintf() : how to free the pointers?

我有这样的代码:我分配了两次log,第一个&log是否有潜在的内存泄漏?char*log=NULL;asprintf(&log,"Hello:%s",name);if(known_person==true){asprintf(&log,"%s,%s",log,",myoldfriend.");}free(log); 最佳答案 是的,代码会泄漏,因为asprintf既不检查也不尝试重用前一个指针。因此,内存只是丢失了。避免示例中问题的最佳方法是将代码重写为char*log=NULL;if(known_person==true)aspr

linux - 如何在 "glibc detected *** free(): invalid pointer"上强制中止

在Linux环境下,当出现“glibcdetected***free():invalidpointer”错误时,如何识别是哪一行代码导致的?有没有办法强制中止?我记得有一个ENV变量来控制它?如何在gdb中为glibc错误设置断点? 最佳答案 我相信如果您将envMALLOC_CHECK_设置为2,glibc将在检测到“free():无效指针”错误时调用abort()。请注意环境变量名称中的尾部下划线。如果MALLOC_CHECK_为1,glibc将打印“free():invalidpointer”(和其他错误的类似printfs)

linux - 如何在 "glibc detected *** free(): invalid pointer"上强制中止

在Linux环境下,当出现“glibcdetected***free():invalidpointer”错误时,如何识别是哪一行代码导致的?有没有办法强制中止?我记得有一个ENV变量来控制它?如何在gdb中为glibc错误设置断点? 最佳答案 我相信如果您将envMALLOC_CHECK_设置为2,glibc将在检测到“free():无效指针”错误时调用abort()。请注意环境变量名称中的尾部下划线。如果MALLOC_CHECK_为1,glibc将打印“free():invalidpointer”(和其他错误的类似printfs)

PHP 特征 : is there a proper way to ensure that class using a trait extends a super class which contains certain method?

PHP手册中的示例#2http://php.net/manual/en/language.oop5.traits.php州sayHello();?>这是正确的代码,但在该上下文中使用parent::是不安全的。假设我编写了自己的“helloworld”类,它不继承任何其他类:在我调用sayHello()方法之前,这段代码不会产生任何错误。这很糟糕。另一方面,如果trait需要使用某个方法我可以将这个方法写成抽象的,这很好,因为它可以确保在编译时正确使用trait。但这不适用于父类:sayHello();echo'World!';}publicabstractfunctionsayHel

PHP 特征 : is there a proper way to ensure that class using a trait extends a super class which contains certain method?

PHP手册中的示例#2http://php.net/manual/en/language.oop5.traits.php州sayHello();?>这是正确的代码,但在该上下文中使用parent::是不安全的。假设我编写了自己的“helloworld”类,它不继承任何其他类:在我调用sayHello()方法之前,这段代码不会产生任何错误。这很糟糕。另一方面,如果trait需要使用某个方法我可以将这个方法写成抽象的,这很好,因为它可以确保在编译时正确使用trait。但这不适用于父类:sayHello();echo'World!';}publicabstractfunctionsayHel

php - 重写 Doctrine Trait 属性

我知道你可以通过在你的类中声明来覆盖trait方法,我很好奇是否可以覆盖trait属性(property)同理。这样做安全吗?它不在文档中,所以我很犹豫是否要实现它。来自文档从基类继承的成员被Trait插入的成员覆盖。优先顺序是当前类中的成员覆盖Trait方法,而后者又覆盖继承的方法。http://php.net/manual/en/language.oop5.traits.php 最佳答案 您不能在使用trait的类中覆盖trait的属性。但是,您可以在扩展使用该trait的类的类中覆盖trait的属性。例如:traitExamp

php - 重写 Doctrine Trait 属性

我知道你可以通过在你的类中声明来覆盖trait方法,我很好奇是否可以覆盖trait属性(property)同理。这样做安全吗?它不在文档中,所以我很犹豫是否要实现它。来自文档从基类继承的成员被Trait插入的成员覆盖。优先顺序是当前类中的成员覆盖Trait方法,而后者又覆盖继承的方法。http://php.net/manual/en/language.oop5.traits.php 最佳答案 您不能在使用trait的类中覆盖trait的属性。但是,您可以在扩展使用该trait的类的类中覆盖trait的属性。例如:traitExamp