C/C++注意事项

我越发越感觉项目和之前的代码相比差距不小,之前的代码只是考虑时间复杂度和空间复杂度,而实际上工程代码要考虑更多的东西。比方说,之前我写代码,从来只有malloc没有free,经常导致代码运行几次就 segment fault了。不得不重新开机。。
这个博客写一下这些语言的一些注意事项。

  • 跨文件传指针

建立了两个文件。一个往 容器里放入指针。一个往容器里取出。然后两个值不一样。。
文件如下

#include <bits/stdc++.h>
using namespace std;
// 放入文件
//#include "ff.h"
//int *num;
vector<int*>q;
int *qq[4];
class node{
      public:
      int *num;
       int temp;
      void set(int x){
           num=&x;
          temp=x;
      }
      void show(){
         cout<<"!!!!"<<*num<<"!!!"<<temp<<"!!!!"<<num<<endl;

      }
};
node bl;
 //int x=5;
int *get(){
  int *num;    
  int x=5;
    //num=(int*)malloc(sizeof(int));
     num=&x;    
    //num=(int *)malloc(sizeof(int));
    //*num=5;
    bl.set(x);
    bl.show();
cout<<(*num)<<endl;
q.push_back(num);
qq[0]=num;
cout<<*num<<endl;
cout<<*q[0]<<"get"<<endl;
cout<<*qq[0]<<"get"<<endl;
return num;
  
}

#include <bits/stdc++.h>
#include "hh.cpp"
//#include "ff.h"
// 一个是取出。
using namespace std;
int main(){
cout<<*get()<<endl;    
//cout<<*num<<endl;
cout<<*q[0]<<endl;
cout<<*qq[0]<<"**"<<qq[0]<<endl;
return 0;
}

运行情况如下:
在这里插入图片描述
(当然是 上面那个了, 输入的是5,输出的两个 vector是0,数组更争气,直接整一个32765。。)但是 指针是不变的(这不是废话么)。
solution:
为了让两个文件更好的传输这个沙雕指针,我将指针设成了全局变量,但是,给他分配的空间却是局部变量。。而系统在局部变量用完之后,竟然会将其清空(虽然这样莫名很安全)。
所以在跨文件传输指针,指针和指针所指向的空间都必须在堆里(空间malloc或者用全局变量取地址都是可以的),不然你可以传指针,但是指针指向的内容给你清空你说气人不气人!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值