小编And*_*ira的帖子

NULL指针与解除分配相同吗?

我正在处理一段代码,我被一个疑问攻击:如果我为该指针分配NULL,分配给指针的内存会发生什么?

例如:

A = new MyClass();

{...do something in the meantime...}

A = NULL;
Run Code Online (Sandbox Code Playgroud)

空间仍然分配,但没有参考.这个空间以后会被释放,它会被重用,它会保留在堆栈中,还是什么?

c++

20
推荐指数
5
解决办法
1804
查看次数

PKI多个公钥

我想知道我是否可以为私钥设置多个公钥.

可以这样做吗?如果是这样,有什么安全问题!?

如果我基于相同的初始值生成多个密钥对(没有初始向量),那么密钥是否应该"兼容"?

security encryption pki

16
推荐指数
2
解决办法
9014
查看次数

Linux - 串口读取返回EAGAIN

我在从以下方式打开的串口读取一些数据时遇到了一些麻烦.我已经多次使用这个代码实例并且一切正常,但现在,由于某些原因我无法弄清楚,我完全无法从串口读取任何内容.

我能够写,并且所有都在另一端正确接收,但是从未收到回复(正确发送)(不,电缆都可以;))

我用来打开串口的代码如下:

fd = open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK | O_NOCTTY);
if (fd == -1)
{
    Aviso("Unable to open port");
    return (fd);
}
else
{
    //Get the current options for the port...
    bzero(&options, sizeof(options)); /* clear struct for new port settings */
    tcgetattr(fd, &options);

    /*-- Set baud rate -------------------------------------------------------*/
    if (cfsetispeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetispeed:");
    if (cfsetospeed(&options, SerialBaudInterp(BaudRate))==-1)
        perror("On cfsetospeed:");

    //Enable the receiver and set local mode...
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag &= ~PARENB; /* Parity disabled */
    options.c_cflag &= …
Run Code Online (Sandbox Code Playgroud)

c linux serial-port

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

查询以查找外键

我有一个数据库,我需要删除一些外键,但我事先不知道外键是否仍然存在.

我找到了一些存储过程(http://forums.mysql.com/read.php?97,218825,247526),但我不想为此创建存储过程.

我试图在存储过程中使用查询,但是我使用"IF EXISTS(SELECT NULL FROM等等)得到错误...

我只能IF EXISTS在存储过程中使用吗?


现在,我唯一可以运行的是

SELECT * FROM information_schema.TABLE_CONSTRAINTS 
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema'
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable';
Run Code Online (Sandbox Code Playgroud)

我也尝试过这个

IF EXISTS (SELECT NULL FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_SCHEMA = DATABASE() AND CONSTRAINT_NAME = parm_key_name) THEN
(...) do something (...)
END IF; 
Run Code Online (Sandbox Code Playgroud)

但我得到了 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF' at …

mysql foreign-keys

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

在vector <struct>上的segfault

我创建了一个结构来保存一些数据,然后声明一个向量来保存该结构.

但是当我做一个push_back时,我得到该死的段错误,我不知道为什么!

我的结构定义为:

typedef struct Group
{
    int codigo;
    string name;
    int deleted;
    int printers;
    int subpage;

    /*included this when it started segfaulting*/
    Group(){ name.reserve(MAX_PRODUCT_LONG_NAME); }
    ~Group(){ name.clear(); }
    Group(const Group &b)
    {
    codigo = b.codigo;
    name = b.name;
    deleted = b.deleted;
    printers = b.printers;
    subpage = b.subpage;
    }
   /*end of new stuff*/
 };
Run Code Online (Sandbox Code Playgroud)

最初,struct没有copy,constructor或析构函数.当我在下面阅读这篇文章时,我添加了它们.

将物品推入STL容器后的段故障

但最终结果是一样的.

这有一个困扰我的地狱!当我第一次将一些数据推入向量时,一切都很顺利.稍后在代码中,当我尝试将更多数据推入向量时,我的应用程序只是段错误!

向量被声明

vector<Group> Groups
Run Code Online (Sandbox Code Playgroud)

并且是我正在使用它的文件的全局变量.其他任何地方都没有外出等等......

我可以将错误追踪到:

_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
Run Code Online (Sandbox Code Playgroud)

在vector.tcc中,当我完成添加/复制最后一个元素到向量....

据我所知.我不需要与复制构造函数有任何关系,因为浅拷贝应该足够了.我甚至没有分配任何空间(但我为字符串做了预备尝试).

我不知道问题是什么!

我在使用gcc 4.1.2的OpenSuse 10.2上运行此代码

由于向后兼容性问题,我真的不急于升级gcc ...

这段代码在我的Windows机器上"完美"运行.我用gcc 3.4.5 mingw编译它没有任何问题...

救命!

--- ...... …

c++ linux struct vector

7
推荐指数
2
解决办法
2355
查看次数

mysql连接.我应该在每次交易之前保持活着还是开始新的连接?

我正在尝试使用mysql,我对如何处理应用程序的连接存有疑问.

我现在正在做的是打开一个连接并保持活着,直到我终止我的程序.我偶尔做一个mysql_ping(),然后用MYSQL_OPT_RECONNECT启动连接.

另一个选择(我能想到),就是在做任何需要我连接数据库的事情之前启动一个新连接,并在完成之后关闭它.

这两种方法的优点和缺点是什么?长连接的"副作用"是什么?最常用的处理方法是什么?

干杯;)


一些额外的细节

在这一点上,我保持连接活着,我不时地ping它到现在它的状态并在需要时重新连接.

尽管如此,当快速连续发生查询时存在一致的并发性时,我得到"服务器已经消失"的消息,并在一段时间后重新建立连接.

我想知道这是否是长时间连接的副作用,或者这只是一个糟糕的mysql服务器配置的情况.

有任何想法吗?

mysql mysql-management

5
推荐指数
1
解决办法
7672
查看次数

指向函数成员的指针

我正在尝试使用指向函数成员的指针,我无法弄清楚它是如何工作的.

我有一个看起来像这样的A级

class A
{
    public:
    float Plus    (float a, float b) { return a+b; }
    float Minus   (float a, float b) { return a-b; }
    float Multiply(float a, float b) { return a*b; }
    float Divide  (float a, float b) { return a/b; }
};
Run Code Online (Sandbox Code Playgroud)

我想声明一个指向A的指针然后向另一个函数传递一个函数指针给A的一个成员.

有点喜欢这个:

void Will_Get_Function_Pointer(float a, float b, float (A::*pt2Func)(float, float))
{
    (...)
}
Run Code Online (Sandbox Code Playgroud)

我会用这样的东西来称呼它

A* myA = new A;
Will_Get_Function_Pointer(1.00,2.00, &myA->Minus)
Run Code Online (Sandbox Code Playgroud)

我不能使用static/const成员,因为在我的最终实现中,A将指向A对象集合中的特定A,其中的对象看起来像这样

vector<A> vecA;
myA = &vecA[xxx]
Run Code Online (Sandbox Code Playgroud)

做到这一点失败了

typedef  float (A::*pA)(float x, float y); …
Run Code Online (Sandbox Code Playgroud)

c++ function-pointers

5
推荐指数
1
解决办法
316
查看次数

rapidjson适当的json创作

我正在尝试使用rapidjson创建一个json,并且我在生成正确的输出时遇到了一些意想不到的问题.

我正在创建和填充这样的文档:

Document d;
d.SetObject();

rapidjson::Document::AllocatorType& allocator = d.GetAllocator();

size_t sz = allocator.Size();

d.AddMember("version",  1, allocator);
d.AddMember("testId",   2, allocator);
d.AddMember("group",    3, allocator);
d.AddMember("order",    4, allocator);

Value tests(kArrayType);
Value obj(kObjectType);
Value val(kObjectType);

obj.AddMember("id", 1, allocator);

string description = "a description";
val.SetString(description.c_str(), static_cast<SizeType>(description.length()), allocator);
obj.AddMember("description", val, allocator);

string help = "some help";
val.SetString(help.c_str(), static_cast<SizeType>(help.length()), allocator);
obj.AddMember("help", val, allocator);

string workgroup = "a workgroup";
val.SetString(workgroup.c_str(), static_cast<SizeType>(workgroup.length()), allocator);
obj.AddMember("workgroup", val, allocator);

val.SetBool(true);
obj.AddMember("online", val, allocator);

tests.PushBack(obj, allocator);
d.AddMember("tests", tests, allocator);

// Convert JSON document …
Run Code Online (Sandbox Code Playgroud)

c++ json rapidjson

5
推荐指数
1
解决办法
4823
查看次数

您可以更改 bsoncxx 对象(文档/值/元素)吗?

我正在使用mongocxx驱动程序,并且正在考虑将 BSON 中给出的查询结果保留为几个对象中的数据持有者,而不是解析 BSON 以检索值然后丢弃它。

“如果”我可以即时编辑 BSON,这将有意义。除了构建器之外,我在bsoncxx驱动程序文档中找不到任何可以让我在构建后操作bsoncxx文档/值/视图/元素的内容。

举个例子,想象我有这样的东西

fruit["orange"];
Run Code Online (Sandbox Code Playgroud)

哪里fruit是一个bsoncxx::document::element

我可以通过使用其中之一来获取该值.get_xxx operators

我找不到的是类似的东西

fruit["orange"] = "ripe";
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,或者构建器背后的想法“只是”创建一个查询以提供给数据库?

c++ json bson

5
推荐指数
1
解决办法
2105
查看次数

模板重载(参考和非参考版本)

我有一个看似简单的问题,我不知道如何解决.

想象一下以下模板方法

template<typename T> void Add(T& var);
Run Code Online (Sandbox Code Playgroud)

专业化可以在容器中添加某些东西(排序).我可以传递POD或更复杂的类型strings,这就是为什么我传递T作为参考.

这个问题是,每当我想用另一个方法的结果调用Add(...)时,例如:

Add(MethodThatReturnsAnInt());
Run Code Online (Sandbox Code Playgroud)

这不起作用,需要一个临时变量来保存结果MethodThatReturnsAnInt().

有没有任何重载方式,Add以便我可以有一个引用传递和非引用传递版本?

template<typename T> void Add(T& var);
template<typename T> void Add(T var);
Run Code Online (Sandbox Code Playgroud)

std::enable_if在这种情况下,有什么用途?

c++ templates overloading

5
推荐指数
1
解决办法
172
查看次数