假设有一个对象A拥有一个对象B via std::unique_ptr<B>.进一步B保持对A的原始指针(弱)引用.然后A的析构函数将调用B的析构函数,因为它拥有它.
在B的析构函数中访问A的安全方法是什么?(因为我们也可能在A的析构函数中).
一种安全的方法是在A的析构函数中明确重置对B的强引用,以便以可预测的方式销毁B,但一般的最佳实践是什么?
嘿,我在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中,我们可以创建一个指向常量字符串的指针
char *s = "abc";
Run Code Online (Sandbox Code Playgroud)
但由于字符串基本上是空终止字符数组,为什么不允许这样做?
char *s = {'a', 'b', 'c' , '\0' };
Run Code Online (Sandbox Code Playgroud)