小编Fer*_*eci的帖子

这是一个释放记忆的好方法吗?

释放实例的函数struct Foo如下:

void DestroyFoo(Foo* foo)
{
    if (foo) free(foo);
}
Run Code Online (Sandbox Code Playgroud)

我的一位同事建议如下:

void DestroyFoo(Foo** foo)
{
    if (!(*foo)) return;
    Foo *tmpFoo = *foo;
    *foo = NULL; // prevents future concurrency problems
    memset(tmpFoo, 0, sizeof(Foo));  // problems show up immediately if referred to free memory
    free(tmpFoo);
}
Run Code Online (Sandbox Code Playgroud)

我看到NULL在释放后将指针设置为更好,但我不确定以下内容:

  1. 我们真的需要将指针分配给临时指针吗?它在并发性和共享内存方面有帮助吗?

  2. 将整个块设置为0以强制程序崩溃或至少输出具有显着差异的结果真的是一个好主意吗?

c memory free

55
推荐指数
2
解决办法
3848
查看次数

如何设置自动递增属性的初始值(DatabaseGeneratedOption.Identity)

我有一个名为Offer的课程如下:

public class Offer
{
    public Guid Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OfferNo { get; set; }

    public OfferType OfferType { get; set; }
    public DateTimeOffset DateAdded { get; private set; }
    public DateTimeOffset DateEdited { get; set; }
    public bool IsActive { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我明显使用Id属性作为我的PK.但我还需要显示优惠的ID(因为用户将使用此值搜索优惠),并且Guid属性太长.

因此,我尝试使用DatabaseGeneratedOption.Identity自动递增整数列OfferNo,但我无法设置初始值以递增.我插入了一个虚拟条目,然后尝试将OfferNo设置为除1之外的其他内容,但收到以下异常:

不支持使用"标识"模式修改列.专栏:'OfferNo'.表:'CodeFirstDatabaseSchema.Offer'.

我想使用代码优先设置此自动递增列的初始值.还将理解替代解决方案.

c# entity-framework

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

标签 统计

c ×1

c# ×1

entity-framework ×1

free ×1

memory ×1