QQ群裡關於動態記憶體的問題

qkk123456789發表於2012-07-19
程式1.
#include "iostream.h"
#include "stdlib.h"
int* b=NULL;
void fuck(int* a);
void main()
{	b = (int*) malloc(2);
	if(b)
	{
		*b=1;
	}
	cout<<b<<endl;
	fuck(b);
}
void fuck(int *a )
{
	free(a);
}

#include "iostream.h"
#include "stdlib.h"
int* b=NULL;
void fuck(int* a);
void main()
{	b = (int*) malloc(2);  // 直接用2作為分配長度不可靠,16位編譯器下int佔2位元組,32位編譯器下int佔4位元組……
	if(b)
	{
		b=1;  // 向指標賦整數常量不可靠,除非確實知道地址的具體值
	}
	cout<<b<<endl;
	fuck(b);
}
void fuck(int *a )
{
	free(a);
}
程式2
b = (int*) malloc(4); 


#include "iostream.h"
#include "stdlib.h"
int* b=NULL;

void fuck(int* a);
void main()
{
	fuck(b);
	*b = 1;
	cout<<b<<endl;
	free(b);
}


void fuck(int*a)
{
	a = (int*) malloc(sizeof(int));
}

#include "iostream.h"
#include "stdlib.h"
int* b=NULL;

void fuck(int* a);
void main()
{
	fuck(b);
	*b = 1;
	cout<<b<<endl;
	free(b);
}


void fuck(int*a)
{
	a = (int*) malloc(sizeof(int)); // 函式引數是傳值的,也就是說引數的變化不會影響到實參,因此這裡分配到的空間的地址不會存到全域性的b中
}

相關文章