關於vc6 0中申請陣列位址的問題

2024-12-30 19:10:12 字數 4749 閱讀 3526

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個元素的位址;

關於VC 6 0的問題

1.c和c 都有標頭檔案 h 原始檔 c或.cpp 的概念 一個專案 就是能夠實現一個完整的既定的功能的軟體 可以包含很多很多的檔案,當然也可以包括像stdio.h或者iostream這樣的標準庫檔案 2.簡單來說 工程 也就是專案 的作用就是把各個檔案組合在一起,再普通一點就是把所有的檔案都放在 ...

用vc60程式設計最簡單的,用VC6 0 程式設計 最簡單的 include stdio h int main int a scanf d , a printf d ,a

程式沒問題,應該是編譯器的問題,建議你換個編譯器別用vc6了。如果你以前在c盤以外的某個碟符裝過vc6,現在重灌改了位置就會出這種問題,手動解決比較麻煩,需要改好幾個檔案路徑。不要聽別人說返回值的問題,不是你寫的程式的問題,返回值只會出警告,不會使程式不能編譯和執行。手動修復這個問題比較麻煩,建議你...

VC 設定畫筆粗細問題,VC 6 0中畫線不能改變粗細的問題

就跟畫了一個矩形一樣 直接畫矩形不就行了嗎,白色畫筆 白色畫刷 你說的直線一頭是半圓的,因為畫素是一個個的圓呀 還是試試畫一個同等大小的矩形,然後用畫刷填充這種方法吧 vc 6.0中畫線不能改變粗細的問題 10 我不知道你mfc出了什麼問題,要不你直接呼叫win32 試試 建立畫筆 createpe...