我越發越感覺項目和之前的代碼相比差距不小,之前的代碼只是考慮時間複雜度和空間複雜度,而實際上工程代碼要考慮更多的東西。比方說,之前我寫代碼,從來只有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或者用全局變量取地址都是可以的),不然你可以傳指針,但是指針指向的內容給你清空你說氣人不氣人!!!