1樓:匿名使用者
1.定義int a
2。定義指標 p int *p ; p=a2.強制轉換 malloc 分配的地址型別 使它等於pp= (int *) malloc()
2樓:匿名使用者
c語言:
int* ptr = (int*)malloc(sizeof(int)); //分配記憶體
*ptr = 100; //對ptr指向的記憶體賦值100free(ptr); //用完之後釋放
c++int* ptr = new int;
*ptr = 100;
delete ptr;
win32程式可以呼叫windows api:
int* ptr = (int*)heapalloc(getprocessheap(), heap_zero_memory, sizeof(int));
*ptr = 100;
heapfree(ptr);
3樓:
int n;
char *p;
p = (char *)malloc(100);
n=2011;
memcpy(p,&n,sizeof(n));
4樓:匿名使用者
int *p = (int *)malloc(100);
c語言 malloc()函式 分配記憶體空間尺寸的問題
5樓:王斌隨
這個問題首先得從堆疊說起,一個程式一般分為三段:**段,資料段(靜態資料),和堆疊段。堆疊段儲存程式中的變數、程式傳遞的引數等(動態分配的變數儲存在堆中,靜態分配的儲存在棧中)。
堆疊的增長方式如下:
程式在執行的時候會預先分配堆疊空間,所以你的問題中不一定修改了不該修改的地方,有可能那裡本來就是空的。
再回到malloc這個函式上來,malloc主要負責分配空間,返回該空間的首地址。那為什麼申請空間為0,卻可以儲存7個字元呢?那是因為c語言的指標中並不檢查陣列的越界問題,不信的話,你可以這樣:
char ch[5],然後你去讀寫ch[6](printf或scanf),這樣是不會報錯的。但是我們在使用的時候,千萬別越界使用,因為這樣的程式是非常危險的,試想,如果越界使用的地址正好是一個作業系統的地址,那麼你一修改,系統就崩了。同時,c語言的這個機制被黑客廣泛地應用與緩衝區溢位攻擊,所以你非但不能越界使用指標,還得時刻考慮到指標(陣列)是否越界,以加強程式的安全性。
希望對你有所幫助。。。
6樓:樂跑小子
c語言中malloc是動態記憶體分配函式。
函式原型:void *malloc(unsigned int num_bytes);
引數:num_bytes 是無符號整型,用於表示分配的位元組數。
返回值:如果分配成功則返回指向被分配記憶體的指標(此儲存區中的初始值不確定),否則返回空指標null。void* 表示未確定型別的指標,void *可以指向任何型別的資料,更明確的說是指申請記憶體空間時還不知道使用者是用這段空間來儲存什麼型別的資料(比如是char還是int或者...
)功能:分配長度為num_bytes位元組的記憶體塊
注意:當記憶體不再使用時,應使用free()函式將記憶體塊釋放。函式返回的指標一定要適當對齊,使其可以用於任何資料物件。
關於該函式的原型,在以前malloc返回的是char型指標,新的ansic標準規定,該函式返回為void型指標,因此必要時要進行型別轉換。
例項:#include"stdio.h"
#include"malloc.h"//malloc()函式被包含在malloc.h裡面
int main(void)
sprintf(a,"%s","helloworld\n");//"helloworld\n"寫入a指向的地址
printf("%s\n",a);//輸出使用者輸入的資料
free(a);//釋放掉使用的記憶體地址
return0;}
7樓:匿名使用者
你何必糾結一定要分配使用者輸入字元數量長度的空間呢?開一個足夠大的陣列不就得了?
如果你一定要malloc準確的大小,你可以char *c;
char *s=malloc(100000*sizeof(char));//malloc一個足夠大的陣列,暫時儲存輸入
scanf("%s",s);
c=(char*)malloc(strlen(s)*sizeof(char));
strcpy(c,s);
free(s);//輸入結束後把輸入儲存,再把這個大陣列釋放
8樓:匿名使用者
malloc是給指標變數分配記憶體空間的函式命令正確使用:
分配的空間要能保證容下你想儲存的資料,不要和機器逗著玩(分配0空間,或少於自己實際需要的空間),如你上面的操作,表面上你程式執行沒有問題,可實際上你佔用了別人的地盤,只是當前你很幸運沒有使程式出現問題,但不保證一定不出問題!!
不再使用的指標,一定要free()來釋放空間!malloc 與free要配對使用,即:有malloc必要有free
c語言中,怎麼使用malloc函式為陣列指標分配空間 比如要為char *p[ ]分配空間,應該怎麼弄
9樓:
指標陣列和陣列指標是兩個不同概念,你這裡給出的定義例項實際上是指標陣列的定義。
指標陣列是指所定義陣列的每個陣列元素都是一個相應資料型別的指標,開設空間的操作可以應用迴圈語句進行,例如:對於char *p[10]; 可以應用
for(i=0;i<10;i++)
p[i]=(char *)malloc(sizeof(char)*n); //為每個指標申請開設n字元的儲存空間
開設後,對於p的使用與二維陣列的使用格式類似,可以有效的使用兩個下標,
如 p[0][0]='a';
還可以像每個指標中賦值字串: p[2]="beijing"; 當然字串長度應該小於n。
而陣列指標,是指定義為指向某個固定大小順序空間的指標,定義的格式如下:
char (*pa)[10]; //定義一個指向擁有10元素的字元陣列的指標,
int (*p)[10];
應用格式可以參考下述程式,申請空間、賦值、輸出後,可以觀察到100被賦值到第五行第十個元素,指標可以像二維陣列一樣通過兩個下標引用所申請開設的空間。
#include
main()}
c語言中,變數初值放在迴圈外部和放在內部的區別
沒有大的區別 只有定義時才有位置問題 當然也看你的這個變數是有什麼用 如for迴圈中迴圈計數值i賦初值放在哪都一樣如果是在迴圈內部每迴圈一次就重複賦值一次 第一 放覆在迴圈內部,制在以下情況下每次迴圈都會被bai初始化 while 1 而在這種情du況下,還是zhi只會被賦值一次for i 0,a ...
c語言編寫函式將字串按逆序存放在
反序字bai 符串,只需要將 du首尾字元依 zhi次dao 調換即可。版 include include 反序字串x並返權回 char reverse char x return x int main 錯了這bai麼多 看看改好的du include include define n 50 voi...
c語言中int型數8在記憶體中的儲存形式為《a》
負數是以補碼存的,求補碼的方法是符號位不變,其他位取反加一啊啊專啊1000 0000 0000 1000 取反是111 1111 1111 0111加一是11111 1111 1111 1000不是剛屬好麼 8在記憶體bai中的儲存形式為 1111111111111000這是du8的按位zhi取反 ...