我越发越感觉项目和之前的代码相比差距不小,之前的代码只是考虑时间复杂度和空间复杂度,而实际上工程代码要考虑更多的东西。比方说,之前我写代码,从来只有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或者用全局变量取地址都是可以的),不然你可以传指针,但是指针指向的内容给你清空你说气人不气人!!!