c 問題關於char的動態分配記憶體

2021-04-12 07:18:53 字數 2611 閱讀 7690

1樓:

你程式**邏輯bai

有問題。dustrlen是求字串zhi長,字串必須以'\0'結束,你的字dao符沒有回以這個字元結束,因此求答得的結果是不確定的。不一定是16。下面,給你一個正確的例子了。

char *a;

a=new char[10];

a[0] ='a';

a[1] ='b';

a[2] ='\0';

int temp=strlen(a); //這時temp的值應該是2。

2樓:匿名使用者

strlen是檢視一個字串的

長度, 和陣列一點關係都沒有, 只跟記憶體裡面連續的內容有關

傳遞迴給strlen的是一個記憶體地址

答, 從那個地址往後面看, 到第一個值為0的地址的距離, 就是strlen的返回值.

傳遞給sizeof的一定是個變數,型別或者陣列名, 當sizeof的是一個變數或者型別, 則返回該變數和型別的大小, 如果sizeof的是一個陣列, 則返回這個陣列佔據的空間大小

p.s. 對一個指向陣列的指標來說, sizeof他並不會返回陣列的大小, 只會返回這個指標的大小, 往往是4個bytes. (根據編譯和執行環境而定)

3樓:匿名使用者

strlen是在執行時求字串的大小,以'\0'為結束符的,由於是動態分配的記憶體,其記憶體的值是不確定的,所以得出16,也有可能是其他的值,這個是不確定的.

sizeof是在編譯時確定大小的.

關於c++動態記憶體分配的問題。

4樓:匿名使用者

肯定存在安全隱患啊,你這屬於記憶體超界了啊。

如果超界的部分還未被使用,那就暫時沒問題而已。

5樓:歸會肖巨集遠

不會自動**的哦,記住了。一定要記得用delete。

6樓:聊芳敬帥

intexample(char*

sp)這段**你可以來逐源步除錯到return時候就返回了baidelete不會執行

另外duc++中new分配的空間一定要用delete才能zhi清空這個我以前做過實dao驗的。

c++ char*型別new的記憶體釋放出問題了

7樓:

point = new char[5];時 point指向bai了du一新分配的記憶體

point = "fda";時,zhipoint拋棄了dao剛new的記憶體,指向了"fda"所在地址。fda"本身已經被分

回配好答記憶體。所以剛才的new記憶體已經失去意義,因為point已經不再指向它了。這也是造成記憶體洩露的一個原因,因為剛動態分配的那塊記憶體已經沒辦法釋放了(被point指標拋棄了,沒辦法再找到這塊記憶體地址,也就沒法delete)。

"fda"的記憶體不是動態分配的,所以delete時出錯。

這要一個一個字元來操作:point[0] = 'f'; point[1] = 'd'; point[2] = 'a'; 或者參考 jxq61 兄的回答。(注意,這裡才是真正的把字元存到新分配的記憶體裡)

8樓:匿名使用者

point 是指標。指向了bai一du

個字串。這個字串是zhi佔六個位元組的。daopoint = new int[10]; 這個是申請了版

一個動態記憶體,int型的權佔4個位元組。 int[10].只是一個整形變數,並不是申請了10個int型的記憶體。而是,只申請了一個。六個位元組的東西往四個位元組裡存,能不出錯嗎?

我是學c語言的,c++只是看了看。我按照c語言的東西來解釋的。希望對你有用。

9樓:匿名使用者

point = new int[10] 表示你分配了 10個int型的空間,你給它賦字串肯定錯了。

就如 int s[5] = "hello"

10樓:萬哩挑壹

delete q;//釋放

原來來的

delete p;//釋放現在的源 '

記住:記憶體釋放了之後不能再使用bai該塊記憶體,最好在釋du放之後將指標zhi變數賦dao值為空 。

delete q;

q= null;

c++是在c語言的基礎上開發的一種物件導向程式語言,應用廣泛。c++支援多種程式設計正規化 --物件導向程式設計、泛型程式設計和過程化程式設計。最新正式標準c++14於2023年8月18日公佈。

其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是至今為止最受廣大程式設計師受用的最強大程式語言之一,支援類:類、封裝、過載等特性!

11樓:匿名使用者

point = new char[5];

point = "fda";//這句來話登出了就源對了 不知道為什麼

point = "fda"

應改為:

memmove( point, "fda", 3);

或:strcpy( point, "fda");

在最前面加上:

#include "string.h"

12樓:匿名使用者

程式在解構函式中釋放字元陣列的時候失敗了,程式試圖去釋放尚未分配的記憶體空間

c 怎麼動態分配陣列並賦值,C 怎麼動態分配一個陣列並賦值

在c 中 大家可能都會使用new關鍵字來 在堆中 動態分配 方法是 int arr new int 變數或數值 可以動態分配指定長度的陣列 在c語言中要使用 malloc calloc 來進行分配 如果要賦值的話可以在申請完記憶體後 使用迴圈進行賦值也可以使用c庫中提供的記憶體操作函式 memset...

C語言malloc動態分配記憶體為什麼叫動態分配記憶體?感覺它分配的時候還是要人為指定大小,而不能根據

同學你誤解了,雖然是要認為指定大小的,但是可以在程式執行時用scanf 函式來隨意指定一個大小,如果不用動態記憶體的話,你在程式執行之前就要指定好大小。不明白可以繼續問!動態的意思是指隨時用到隨時分配,不用的時候隨時可以銷燬。動態記憶體分配不需要象陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而...

關於C 動態連結串列的問題求解答

從你 中看出,p1是用來在迴圈中不斷接收新建的結構地址的,p2是個中介,用於不斷將新建立的結構連線起來。在迴圈之外,先建立一塊結構記憶體空間,p1和p2都指向同一個地址,只是為了初始化,其實對p1賦值為了防止指向無效空間,沒其他意義,進入迴圈體p1會不斷被更改重新整理。初始化時第一塊結構中的next...