1樓:網友
/輸入資料沒有控制在申請的大小之內,而且使用過後沒有釋放申請的空間。
#include
#include
void main()
int *a;
int x,i,j;
scanf("%d",&x);
a=(int *)malloc(5 * sizeof(int));獲得基址。
for(i=0;x!=0&&i<5;i++)0作為結束標誌。
a[i]=x;
scanf("%d",&x);
for(j=0;jprintf("%d",a[j]);
free(a);
2樓:匿名使用者
系統不會自動釋放,如果你的記憶體都被分配完了,那麼就會發生記憶體洩露。
還有,你是以x是否為0為結束符的,如果你都不輸入0,那麼將會發生堆溢位!
你應該限制輸入長度。
3樓:網友
malloc()是c語言中動態儲存管理的一組標準庫函式之一。
如果只用c編寫的話,又想使用malloc函式,那直接使用就是了啊。
4樓:網友
陣列賦值的時候判斷條件應該為i<20,而不是原來的x!=0
建議多看看c方面的書哈。
陣列申請的問題
5樓:匿名使用者
c語言可以這樣做:
#include
int main(void)
int i=8;
int *arr=(int )malloc(sizeof(int)*i);/分配i個儲存int值的連續空間*/
arr[0]=1;
free(arr);/釋放為伏辯arr分配的空間*/return 0;
c++語言中除了以上汪辯c語言的做法外,還可以這樣做:
int main(void)
int i=8;
int *arr=new int[i];
arr[0]=1;
delete arr;/缺陵缺*釋放空間*/return 0;
c語言用malloc申請完陣列後,怎樣再檢視申請陣列的大小
6樓:網友
c語言本身不提供檢視動態分配的記憶體大小,因為分配記憶體是系統的api函式完成的。
但是通過呼叫系統的api函式可以檢視記憶體分配大小,不然肯定無法釋放這些記憶體了。
以windows為例:
#include
using namespace std;
int main()
int *p=(int *)malloc(sizeof(int)*10);
cout<
7樓:網友
沒法看,分配記憶體是系統的api函式完成的,除非分配時記住了大小,否則你找不到記錄大小的位置,雖然記錄這個大小的資料一定存在。
8樓:網友
1、一般是獲取不到的,不過這個也得看編譯器是如何實現的。vc++在每次分配的動態陣列的起始位址之前記錄動態陣列的大小,這樣就可以得到記憶體空間大小。
2、例如:int *a=new int[12];
cout<<"動態陣列佔用記憶體大小:"<<*a-4)b=(int*)malloc(sizeof(int)*12);
cout<<*b-4)/sizeof(b)cout<<*b-4)/sizeof(b)< 9樓:網友 只能根據呼叫malloc時候的引數…… 10樓:投機士 這個涉及兩個儲存區域,堆和棧,你用malloc申請的空間在堆上,char a[10]這個是在棧上。 堆和棧最重要乙個區別是,棧是系統管理的的,他負責**和釋放,所以有個概念叫作用域,變數的作用域一結束,棧就**變數的資源。但是堆是程式設計師管理的,你不釋放,除非程序結束,這個空間就一直在那,就有了一定靈活性。 堆在實現的時候確實是在底層是連結串列的形式沒錯,棧是連續的空間。 動態申請記憶體空間給陣列出錯 11樓:網友 二維陣列動態分配記憶體要分兩步,第一步用指向指標的指標生成一維的指標陣列,第二步用一維陣列中的各個指標分別生成一維陣列,這樣就得到二維陣列。 a = (double **malloc(sizeof(double *)total_elem+1));//動態分配total_elem+1位元組的內。 你只完成了第一步,當然出錯了。 你看一下這裡的講解吧: 請問:「如何在申請數陣列時讓它的首位址(陣列名)為乙個指定好的實體地址?」 12樓:網友 在c中可以的!因為大家把c稱為中級語言,就是因為它也要以編譯彙編語句!我認為會的! vc6將陣列顯示在螢幕上的問題 13樓:網友 ascii碼顯示在螢幕上就是這樣。 怎麼「動態申請」「建立動態陣列」? 14樓:高速路上飆單車 char array[1000][1000];這個是放到棧裡,棧不夠大就不行了,不需要自己釋放。 char *array = (char*)malloc(1000*1000*sizeof(char));就是動態申請了,申請用完後要用free array;這個是放到堆裡的。如果申請很多會用到虛擬記憶體儲存到硬碟裡,你用。 while(1) array = malloc(10000000); 不釋放就會聽到硬碟響的很厲害。 15樓:匿名使用者 動態陣列 new malloc realloc等; vector,把使用者的輸入都 push_back 就行了。 char*p,*q;; int a=1; p=(char*)malloc(a); whilea++; q=p;p=(char*)realloc(q,a);//通過realloc擴大p的空間,並把新的位址賦值給p。;新陣列大小加1 if(結束條件) break; char*)realloc(q,20);//a行,通過realloc擴大p的空間,並把新的位址賦值給p。 16樓:網友 array[1000][1000]失敗是棧不夠大的原因。如果不修改棧大小,用動態陣列,應該這樣用: int** array;//(int 可以換成其它的型別)array = (int**)malloc(1000*sizeof(int*)) for(int i=0;i<1000;i++)array[i] = (int*)malloc(1000*sizeof(int)); 這裡使用array,使用方法跟你的那個array完全一樣。 for(int i=0;i<1000;i++)free(array[i]); free(array); free的語法沒錯吧?忘了,自己看看吧。 17樓:網友 c++的語法: int *array = new[1000][1000]; 就可以建立乙個動態的陣列。 delete array; 用了之後要釋放空間; c語法:申請空間。 char *array = (char*)malloc(1000*1000*sizeof(char)); 用完釋放空間。 free(*array); 18樓:網友 指標陣列。用多少建立多少。不費記憶體,動態儲存空間。" 真是牛* 關於申請陣列空間的問題 19樓:廖北伯 note1: alloc2d 可以, 但 for(i2=0 ..應改為 for(i2=1; . 不改也可以, 就是多餘的操作而已。 note2: alloc3d必須填寫。 1) p[i3], i3=1,2,..n3-1 的指標內容。 2) p[i3][i2], i3=1,2,..n3-1, i2=0,1,..n2-1 的指標內容。 你把(1)的部份漏掉了。 所以在做(2)的時候就碰上空指標。 note3: 用指標的指標模擬2d陣列已經不太好了, 用指標的指標的指標模擬3d陣列非常糟。 要是我來寫,就用1d陣列模擬2d,3d,4d,..陣列。 取用時不使用 p[i][j][k]=x 的格式,而是另寫乙個函式 float* at(int i, int, j , int k). 使用時的格式為 *(at(i,j,k))=x. 20樓:網友 無論是幾維陣列,儲存上都是連續的。 所以直接分配需要的空間就可以了。 int* buf = (int *)malloc(sizeof(int)*3*3*3); for(i=0;i<3;i++) for(j=0;j<3;j++) for(k=0;k<3;k++) 陣列記憶體的首位址和陣列第0個元素的位址什麼區別? 21樓: 它們的位址值是相等的; 第0個元素的位址如果是p,則p+1就是第1個元素的位址; 1.c和c 都有標頭檔案 h 原始檔 c或.cpp 的概念 一個專案 就是能夠實現一個完整的既定的功能的軟體 可以包含很多很多的檔案,當然也可以包括像stdio.h或者iostream這樣的標準庫檔案 2.簡單來說 工程 也就是專案 的作用就是把各個檔案組合在一起,再普通一點就是把所有的檔案都放在 ... 程式沒問題,應該是編譯器的問題,建議你換個編譯器別用vc6了。如果你以前在c盤以外的某個碟符裝過vc6,現在重灌改了位置就會出這種問題,手動解決比較麻煩,需要改好幾個檔案路徑。不要聽別人說返回值的問題,不是你寫的程式的問題,返回值只會出警告,不會使程式不能編譯和執行。手動修復這個問題比較麻煩,建議你... 就跟畫了一個矩形一樣 直接畫矩形不就行了嗎,白色畫筆 白色畫刷 你說的直線一頭是半圓的,因為畫素是一個個的圓呀 還是試試畫一個同等大小的矩形,然後用畫刷填充這種方法吧 vc 6.0中畫線不能改變粗細的問題 10 我不知道你mfc出了什麼問題,要不你直接呼叫win32 試試 建立畫筆 createpe...關於VC 6 0的問題
用vc60程式設計最簡單的,用VC6 0 程式設計 最簡單的 include stdio h int main int a scanf d , a printf d ,a
VC 設定畫筆粗細問題,VC 6 0中畫線不能改變粗細的問題