小编ksb*_*ksb的帖子

在析构函数c ++中访问所有者

假设有一个对象A拥有一个对象B via std::unique_ptr<B>.进一步B保持对A的原始指针(弱)引用.然后A的析构函数将调用B的析构函数,因为它拥有它.

在B的析构函数中访问A的安全方法是什么?(因为我们也可能在A的析构函数中).

一种安全的方法是在A的析构函数中明确重置对B的强引用,以便以可预测的方式销毁B,但一般的最佳实践是什么?

c++ smart-pointers ownership-semantics

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

malloc(sizeof(s))分配的内存少于预期?

嘿,我在malloc中使用sizeof运算符时遇到问题.例如,请参阅下面的内容.码-

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * copy(char *s)
{
    char *t=malloc(sizeof(s));
    char *ptr=s;
    int i=0;
    do
    {
        t[i++]=*ptr++;
    }
    while(*ptr!='\0');
    return t;
}
int main()
{
    char *s="hello adsjahsjkdhjkashdkjaskdasldjlasjdlajsdlkjaslkdjalsjdlasjdljasdljasdkljklsdjlasdsadasdasd";
    char *b=copy(s);
    printf("%s\n",b);
    free(b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在ideone上,它给出错误: - *glibc检测到./prog:free():下一个大小无效(快):0x09bcf008**

但是当我用malloc(strlen(s)+1)替换malloc(sizeof(s))时,程序运行得很好.所以有什么问题?注意:这只是我创建的一个小程序,用于演示我在另一个代码中遇到的问题.

c malloc

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

C中的字符串常量和数组

在C中,我们可以创建一个指向常量字符串的指针

char *s = "abc";
Run Code Online (Sandbox Code Playgroud)

但由于字符串基本上是空终止字符数组,为什么不允许这样做?

char *s = {'a', 'b', 'c' , '\0' };
Run Code Online (Sandbox Code Playgroud)

c arrays string

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

标签 统计

c ×2

arrays ×1

c++ ×1

malloc ×1

ownership-semantics ×1

smart-pointers ×1

string ×1