1樓:匿名使用者
實際上在c++的string中,這個length依然是strlen()求出來的值,
目前來看,要解決你說的問題,貌似只能用結構體來存了,struct mystr
; mystr str;
str.length=20;
str.arrray==(char *)malloc(sizeof(char)*str.length);
期待高手給出更好的方法。
2樓:
用sizeof函式是求不出來分配塊的大小的,strlen更不行了。只有在分配的時候把大小存住。不過分配的時候一般都用巨集來定義大小的。
所以需要的時候用巨集還是比較不錯的。再者就是用上面樓說的用結構體存一下吧。
3樓:
你說得對, 動態分配的空間只能自己用乙個變數來儲存。動態分配後只有作業系統才知道它有多大。 strlen只計算從當前位址開始到遇到'\0'的長度,所以沒有初始化的空間是不能用strlen的。
4樓:蒼蠅**
這樣就好了
5樓:匿名使用者
參考一下這個:
c語言怎樣求指標指向的記憶體塊的大小? 5
6樓:匿名使用者
malloc分配的記憶體大小,當然c執行庫是有儲存這個值的,但你並不能使用它,也不能用正常的方式得到它。它的存在只為了free的時候能夠正常的釋放。
所以建議只有,**是你寫的,malloc了多少你自己必然是知道的,沒有必要去查這個資訊。
7樓:當年的反應慢
如果是char *p 可以用strlen(p)來量,其他的型別計算長度,就沒什麼太大意義了吧
8樓:__烟花已冷
p = (char)malloc(4);
4*sizeof(*p);試試
9樓:匿名使用者
不是太明白你得問題。
一般用malloc分配位址的時候需要設定分配的大小,你這裡就是4個char型的資料,而char型是1個位元組的,所以就是4了。這個大小返回的是位元組數。
補充一下,這個大小預設是以位元組為單位,如果你的型別是浮點的,應該是這樣:
float *p;
p= (float*)malloc(4*sizeof(float));
這樣分配的才是4個浮點資料記憶體。
這個指標的記憶體塊大小就是4*sizeof(float)
怎麼檢視動態分配記憶體空間的大小(c語言)。
10樓:匿名使用者
1、這個空間是自己分配的,既然已經寫了p=(int *)malloc(10000)那就分配10000的大小,還需要顯示多少大小。對於乙個指向一塊記憶體的指標如果用比如sizeof(p)顯示大小(int * p=new int[10]),也只是顯示4,代表首位址大小,不能顯示正塊記憶體的大小,而且根本沒有意義。
2、動態記憶體分配,可以自由的分配指定大小的記憶體空間。當程式執行時,程式設計師並不清楚某一資料需要的具體記憶體空間大小時,可以使用動態分配。
malloc函式原型
void *malloc(int nsize)
分配乙個nsize大小的記憶體空間,如果分配成功則返回位址空間的首位址,如果分配失敗則返貨null
nsize一般使用 sizeof(型別a)*n 的計算方式獲取大小。意思為:為分配n個型別a所佔空間的大小。
獲取的指標位址需要強制轉換為指定型別
例如:int *p = (int*)malloc(sizeof(int)*100);
使用malloc動態分配的記憶體空間需要使用free函式手動釋放。
11樓:梁丘鴻遠冒睿
在c語言中,要在堆上分配空間,需要使用記憶體申請函式。一般用malloc。
void
*malloc(int
size);
可以申請一段長度為size位元組的空間,並返回空間的首位址。
要清空分配的記憶體空間,也就是將該空間所有位元組均賦值為0,可以使用memset函式。
該函式宣告與string.h中,形式為
void
memset(void
*start,
intvalue,
intsize);
如果要清空空間的首位址為p,大小為len,則可以呼叫memset(p,
0,len);
12樓:匿名使用者
自己malloc出來當然知道位元組大小,如果把指標傳給乙個函式呢,函式如果不知道其空間大小,對其操作時是有很大溢位風險的,但我又不想增加乙個傳入引數,sizeof()的確算不出指標指向的空間大小,那只能將指標交給與他人使用的時候,把空間大小也告訴對方。所以有時候沒辦法要妥協一下
只通過指標貌似無法知道指標指向的空間大小,那麼free函式又是怎麼知道呢。malloc在分配空間的時候會多分配一些空間來存放分配資訊。(據說在每個記憶體塊的最前的4個位元組就存放了malloc的位元組大小資訊,可以自己寫乙個函式把這些資料提出來,我目前還沒有試驗過)
c語言中怎麼得到乙個指標所指的空間的大小,如:char *p=(char *)malloc(10*sizeof(char));
13樓:金色潛鳥
char *p=(char *)malloc(10*sizeof(char)); 我們知道 是 10。但我們沒有簡單方法能獲得「10」。
通過 calloc, malloc, realloc 分配的空間 (實際消耗的heap空間) 用 函式
size_t _msize( void *memblock ); 可以獲得。
獲得的位元組數,可能大於10。估計原因同 分配結構空間類似,考慮對齊或考慮什麼,要多用去一點空間。
#include
#include
main()
我的編譯器編譯運算結果,輸出 是 16。
14樓:情義
"通過 calloc, malloc, realloc 分配的空間 (實際消耗的heap空間) 用 函式
size_t _msize( void *memblock ); 可以獲得。
具體如下:
#include
#include
main()
編譯器編譯運算結果,輸出 是 16。"
15樓:匿名使用者
得不到的,定義常量吧
16樓:匿名使用者
只能10*sizeof(char)
c語言如何確定乙個指標是否已分配過的記憶體
17樓:匿名使用者
如果malloc()分配失敗,就會返回null,如果成功,那麼返回的就是這段空間的首位址,而不會是null,可以據此判斷malloc()分配是否成功。
18樓:匿名使用者
判斷是否已分配記憶體可以測試指標是否為空,不為空則為已分配,具體可以使用sizeof函式。
1、假設使用c語言的動態分配記憶體函式malloc為指標p分配1000個int型的空間
int* p;
p = (int *) malloc (1000*sizeof(int)); //分配記憶體
if (!p)
printf("記憶體已分配");
19樓:
沒得辦法,只能靠自己注意了,使用null來判斷,自己養成良好的習慣以後這應該不是什麼問題。
初始化的時候要, char *s = null;
記憶體釋放完以後也要, free(s); s = null;
c語言 關於為指標的指標分配記憶體的問題
20樓:匿名使用者
首先:int** 是乙個二級指標,它是指標的指標,如果你要申請乙個二維陣列,有下面兩個方法:
int** val = (int**)malloc(sizeof(int*) * 10);
int i;
for(i = 0; i < 10)
val[i] = (int*)malloc(sizeof(int) * 10);
然後你可以這樣引用:*(*(val+m)+n) = value;
第二種:int* val = (int*)malloc(sizeof(int) * 10 * 10);
然後這樣引用:*(m*10 + n) = value;
這其實就是個一維陣列,不過你把它看成二維的處理。。
希望對你有幫助哦
21樓:匿名使用者
//給你一段**看看,呵呵。
int i=0,j=0,x=10,y=10;
int **array=null;
//注意,是這樣申請空間的,一次性完成
array=(int**)malloc(sizeof(int)*x*y + y*sizeof(int*));
array[0]=(int*)((char*)array + y*sizeof(int*));
for(i=1;i for( i = 0 ; i < y; i++ )}for( i = 0 ; i < y; i++ )}free(array);//注意,是這樣釋放空間的,一次性完成 22樓: array 是 int * * 型的嗎?我在vc6.0測試,分配記憶體是正確的,但要明白,分配的記憶體都被認為是int*型的,也就是101個int*型的空間。 *(array+j)得到這101個空間中的某個,是int*型,*(*(array+j)+n)是這101個指標中的某乙個指向的記憶體空間,而這個記憶體空間沒有分配,所以程式執行時會出錯。至於在16位機器上通過,只是僥倖而已,因為16位機器沒有記憶體保護,所有的空間都能訪問,如果訪問了作業系統的空間,可能不會立即崩潰,但系統有可能出問題的。而32位機器有保護模式,訪問非法空間系統會報錯。 23樓:匿名使用者 使用sizeof,就和機器位數無關~ 二級指標動態分配方式如下: int **a; a=(int**)malloc(m*sizeof(int*)); for(i=0;i a[i]=(int*)malloc(n*sizeof(int)); c/c++怎樣檢測指標是否已經分配空間 24樓:匿名使用者 int * p; 宣告了乙個指標變數 p, 就為它分配了記憶體了,它佔2位元組大小的記憶體。 如果你說 p = new int[2];才算是分配記憶體,那我告訴你,這句話的意思: 通過new 向系統申請sizeof(int) * 2的記憶體大小,接下來把這塊記憶體的位址返回, 並儲存在p中。 並不是說p有2個int大小的記憶體呢。~~~int * p和int p 一樣,宣告的時候就分配了記憶體。 if ( p )是判斷p是否儲存了一塊記憶體位址,如果不儲存,即為null,否則為記憶體的位址啦。~~~ 25樓:匿名使用者 判斷是否為空 如:int *p; p = ( int * )malloc( sizeof(int) * 5 ); if( null == p ) 5代表需要申請5個int型的空間 26樓:匿名使用者 宣告指標時讓它等於null or 0 然後在分配完後檢測它是否還是null or 0 1 p的成員還沒有賦初值,2 printf d n p.data 有語法錯誤改為 printf d n p.data 3 next 指標還沒有初始化,也就是說沒有指向某個可以使用的空間 2293576 2147340288 以上為執行結果.表示都是垃圾內容.你創造了乙個linklist型別的變數,也... 1,char指標不一定必須分配空間才能賦值,比如char ch a char p p ch 或者char str null str malloc 4 if str null 2,memset不是用來分配空間的,而是分配空間之後用來初始化空間的。比如char p malloc sizeof int m... include using namespace std struct node int main 可以看看這個裡面的,單鏈表就是你描述的那種用法 上面那個是乙個簡單的建立單節點的 free arry 修改如下 include include include include include inclu... 你第二次malloc返回的值將p原來的值覆蓋掉了,也就是原來的資料無法引用了,現在p只指向乙個float,你卻用p i引用,肯定是不可以的。動態分配記憶體不是你這樣用的,好好看看書把概念搞清楚。你第一次分配的記憶體還沒有釋放,第二次又分配指向同乙個指標,那前面的記憶體都浪費了。還有你第二次僅分配了1... 在析構函式裡清除 a 指標 pointer 是程式語言中的乙個物件,利用位址,它的值直接指向 points to 存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為 指標 意思是通過它能找到以它為位址的記憶體單元。在高階語言中,指標...c語言指標記憶體分配問題?跪求大俠解決
char指標變數分配空間,char陣列與char指標的記憶體分配空間
C指向結構體的陣列指標動態分配記憶體後如何刪除
請c語言高手動態分配指標問題
C 類裡面的指標如何清除,C 類裡面的指標如何清除