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或者用全局變量取地址都是可以的),不然你可以傳指針,但是指針指向的內容給你清空你說氣人不氣人!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章