亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言 關于malloc分配內存問題.

C語言 關于malloc分配內存問題.

農民爸爸 2016-04-17 12:56:09
代碼1:為什么可以通過for循環分配i的內存???#include<stdio.h> #include<malloc.h> #include<stdlib.h> int?main() { int?j; for?(j=0;?j<5;?j++) { int?*?i?=?(int?*)malloc(sizeof(int)); printf("內存地址:%d\n",?i); } return?0; } /*輸出結果: 內存地址:5312288 內存地址:5312320 內存地址:5312336 內存地址:5312352 內存地址:5312368 */代碼2:為什么這樣就提示錯誤??#include<stdio.h> #include<malloc.h> #include<stdlib.h> int?main() { int?*?i?=?(int?*)malloc(sizeof(int)); printf("內存地址:%d\n",?i); int?*?i?=?(int?*)malloc(sizeof(int)); printf("內存地址:%d\n",?i); int?*?i?=?(int?*)malloc(sizeof(int)); printf("內存地址:%d\n",?i); return?0; } /*提示錯誤: a.c:?In?function?'main': a.c:10:8:?error:?redefinition?of?'i' a.c:8:8:?note:?previous?definition?of?'i'?was?here a.c:12:8:?error:?redefinition?of?'i' a.c:10:8:?note:?previous?definition?of?'i'?was?here */問題:問什么代碼1可以重復分配i的內存而代碼2不可以,分配出來5塊內存都是以i為命名的嗎?不會命名沖突嗎?初學程序小白,望大神搭救!!
查看完整描述

3 回答

已采納
?
Shanhui

TA貢獻1條經驗 獲得超2個贊

代碼1 中的i是局部變量,在for語句中每一次循環時重新創建和釋放, ?代碼2中你重復使用了同一個變量,會報使用了已經定義的變量的錯誤

查看完整回答
2 反對 回復 2016-04-17
  • 農民爸爸
    農民爸爸
    1.malloc的內存之后沒有free,是否每次重復定義i時,會被釋放? 2.malloc內存如果沒有釋放,該內存空間,是否都還是以i來命名?
?
慕粉3754631

TA貢獻1條經驗 獲得超0個贊

?使用malloce命令不是只需要在頭文件加入????#include <stdlib.h>????嗎?

怎么你的頭文件確實卻多了一個????#include<malloc.h>?????????我不懂,望解答。

還有個問題我想問你:

void * malloc(unsigned int size)????這個命令,

為啥例子是這樣寫的: malloc(100);????分配100個字節

我又看到這樣用的:(int *)malloc(5 * sizeof(int));????我知道sizeof(int)是測量本系統int型單位字節數,但我不明白為什么在前面要加個 ?* ? 號?這樣有啥意義嗎?

還有就是另一個命令void * calloc(unsigned n,unsigned size); ?這個怎么用,比如我要開辟一個N個長度為size的連續空間,保存一個? ? char * 型的指針數組????那如何實現?我的想法是比如:
(char *)calloc(50,4);????開辟50個長度為4字節的連續空間

但我又怕會不會是這樣:

(char *)calloc(50,4 * sizeof(char));????這樣有問題嗎?可以加????*????號嗎?

可以sizeof(char)測量char型的單位字節數?恐怕這不能這樣測量吧?。。????

希望大神解答



查看完整回答
反對 回復 2016-08-17
?
農民爸爸

TA貢獻6條經驗 獲得超0個贊

這個問題是,前幾天學習鏈表的創建,所疑惑的地方.

現在我有答案了

循環創建動態內存,如上邊代碼 int * i.

i?的地址是不會變的,但i里邊保存即是指向的地址是每次循環就變動一次.

創建出來不知名的動態內存,沒有被釋放,系統還是把那些內存分配給了該程序.

但程序員已經找不到了.

查看完整回答
反對 回復 2016-04-24
  • 3 回答
  • 1 關注
  • 2427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號