我在C++中看到有多种方式来分配和释放数据,我知道当你打电话给malloc你时应该打电话free,当你使用new操作员时你应该配对,delete将两者混合是错误的(例如,调用free()创建的东西)与new操作员),但我不知道何时应该使用malloc/ free何时应该在我的真实世界程序中使用new/ delete.
如果您是C++专家,请告诉我您在此方面遵循的任何经验法则或惯例.
#include <stdio.h>
typedef struct node
{
int i;
struct node *next;
}node;
node getnode(int a)
{
struct node n;
n.i=a;
n.next=NULL;
return n;
}
main()
{
int i;
node newtemp,root,temp;
scanf("%d",&i);
root=getnode(i);
temp=root;
while(i--)
{
newtemp=getnode(i);
temp.next=&newtemp;
if(root.next==NULL)
{
root=temp;
}
temp=*(temp.next);
}
temp=root;
while( temp.next != NULL )
{
printf(" %d ",temp.i);
temp=*(temp.next);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图在不使用malloc的情况下创建链表.编程只打印根,后面没有节点.我找不到这个bug.如果有任何内存问题,gcc编译器会抛出一个分段错误.(?)请忽略糟糕的编程风格..
有人告诉我,分配malloc不再安全了,我不是C/C++大师,但我用malloc和C/C++做了一些东西.有谁知道我有什么风险?
引用他:
[..]但事实上,C/C++的弱点在于它的安全性,而阿喀琉斯的脚跟确实是malloc和滥用指针.C/C++它是一种众所周知的不安全语言.[..]我不建议继续用C++编程的应用程序很少."
当在运行时已知大小时,常说使用 malloc 我们也可以写
int x;
scanf("%d",&x);
char arr[x];
Run Code Online (Sandbox Code Playgroud)
那么当我们可以动态声明数组时为什么要使用 malloc 呢?