下面的程式malloc的地址為什么是一樣的?屏蔽掉CreatList(int n)中的while(p == NULL)之后就沒問題,望大神解答,謝謝。
//---------------------------------------------------------------------------
#ifndef ListH
#define ListH
#include <stdlib.h>
#include <tchar.h>
#include <stdio.h>
typedef int Type;
typedef struct node
{
Type data;
struct node* Next;
}List,*pList;
class CList
{
private:
int Length;
public:
CList()
{
Length = 0;
}
List* CreatList(int n)
{
pList p = NULL, r = NULL, l = NULL;
for(int i=1;i<=n;i++)
{
while(p == NULL)
{
p = (List*)malloc(sizeof(List));
printf("%d\n",p);
}
p->data = i;
p->Next = NULL;
if(l == NULL)
{
l = p;
}
else
{
r->Next = p;
}
r=p;
}
Length = n;
return l;
}
};
#endif
uj5u.com熱心網友回復:
CreatList里申請多個地址,就不要加判斷了uj5u.com熱心網友回復:
呵呵,你的p指標只在for回圈外初始化一次,在第一次分配后就不是NULL了,所以在后面的回圈中就不會再進入while中去分配新記憶體了,所以看起來每次都一樣解決辦法是在每次進入到while前把p重新初始化為NULL,或者干脆不用進行malloc是否分配成功的測驗,因為一般情況下都會分配成功的,如果不成功,回圈反復分配也沒用,不是程式員能控制的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/119848.html
標籤:基礎類
上一篇:求指教啊....
下一篇:撰寫程式,提示用戶輸入一個mp3歌曲檔案的檔案名(可以帶有路徑),通過代碼將該歌曲中的歌手名修改為自己的學號和姓名,并通過音樂播放器進行播放驗證。
