各位大佬幫忙看一下吧,小弟就是交個作業,太難了
我太難了T﹏T

uj5u.com熱心網友回復:
怎么說呢,代碼問題有點多。最主要的一點就是,在函式中宣告的,函式結束后就消失了。我給你改寫了一下,你看看吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Linklist;
void ScanfLinkList(Linklist* L, int n) {
int i = 0;
Linklist* pcurr = L;
printf("enter data:");
scanf("%d", &pcurr->data);
for (int i = 1; i < n; i++) {
Linklist* tmp = (Linklist*)malloc(sizeof(Linklist));
if (L == NULL) {
printf("malloc error!\n");
return;
}
printf("enter data:");
scanf("%d", &tmp->data);
tmp->next = NULL;
pcurr->next = tmp;
pcurr = pcurr->next;
}
}
void show(Linklist* L) {
if (L == NULL) {
printf("this is null\n");
return;
}
while (L) {
printf("data is %d\n", L->data);
L = L->next;
}
}
int main() {
int n = 0;
Linklist* L = (Linklist*)malloc(sizeof(Linklist));
printf("init list!!!!!\n");
if (L == NULL) {
printf("malloc error!\n");
return -1;
}
memset(L, 0, sizeof(Linklist));
printf("enter length of list:");
scanf("%d", &n);
ScanfLinkList(L, n);
show(L);
return 0;
}
uj5u.com熱心網友回復:
那個創建空間,就直接在main函式中創建一次就可以嗎,這個不太懂 大佬
uj5u.com熱心網友回復:
你不是要以指標形式保存么,宣告一次,把附加的附到后面不就好了。
先假設你寫的程式別的問題沒有,單純說在函式體malloc的,生命周期也只有那個函式存活周期。所以你認為你把這個東西給了L,然后就可以呼叫函式show列印了。但是結果是沒有的。
因為傳到show的還是你第一次在main宣告的那個,你在連接node的函式中連接的那部分記憶體,被泄露了。也就是并沒有附加到L。所以L->next是空的,當然也就列印不出來了。
當然你的程式問題太多了,比如說釋放指標要free啊,然后你這個在main中宣告的指標也沒有初始化,這是野指標。。
如果你想要在函式體malloc然后再傳到外面,你可以宣告為static,這樣存活周期就和整個程式存活周期一樣了。
uj5u.com熱心網友回復:
怎么說呢,代碼問題有點多。最主要的一點就是,在函式中宣告的,函式結束后就消失了。
我給你改寫了一下,你看看吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Linklist;
void ScanfLinkList(Linklist* L, int n) {
int i = 0;
Linklist* pcurr = L;
printf("enter data:");
scanf("%d", &pcurr->data);
for (int i = 1; i < n; i++) {
Linklist* tmp = (Linklist*)malloc(sizeof(Linklist));
if (L == NULL) {
printf("malloc error!\n");
return;
}
printf("enter data:");
scanf("%d", &tmp->data);
tmp->next = NULL;
pcurr->next = tmp;
pcurr = pcurr->next;
}
}
void show(Linklist* L) {
if (L == NULL) {
printf("this is null\n");
return;
}
while (L) {
printf("data is %d\n", L->data);
L = L->next;
}
}
int main() {
int n = 0;
Linklist* L = (Linklist*)malloc(sizeof(Linklist));
printf("init list!!!!!\n");
if (L == NULL) {
printf("malloc error!\n");
return -1;
}
memset(L, 0, sizeof(Linklist));
printf("enter length of list:");
scanf("%d", &n);
ScanfLinkList(L, n);
show(L);
return 0;
}
那個創建空間,就直接在main函式中創建一次就可以嗎,這個不太懂 大佬
你不是要以指標形式保存么,宣告一次,把附加的附到后面不就好了。
先假設你寫的程式別的問題沒有,單純說在函式體malloc的,生命周期也只有那個函式存活周期。所以你認為你把這個東西給了L,然后就可以呼叫函式show列印了。但是結果是沒有的。
因為傳到show的還是你第一次在main宣告的那個,你在連接node的函式中連接的那部分記憶體,被泄露了。也就是并沒有附加到L。所以L->next是空的,當然也就列印不出來了。
當然你的程式問題太多了,比如說釋放指標要free啊,然后你這個在main中宣告的指標也沒有初始化,這是野指標。。
如果你想要在函式體malloc然后再傳到外面,你可以宣告為static,這樣存活周期就和整個程式存活周期一樣了。
感謝大佬! 真是以前沒學 現在啥都不懂啊,謝謝這么用心的幫我都打出來了,非常感謝!!!
太感謝了
好人一生平安 謝大佬 有不懂得 我還會繼續在下面問的
您有空就幫我解答一下子 哈哈 謝謝了
uj5u.com熱心網友回復:
怎么說呢,代碼問題有點多。最主要的一點就是,在函式中宣告的,函式結束后就消失了。
我給你改寫了一下,你看看吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Linklist;
void ScanfLinkList(Linklist* L, int n) {
int i = 0;
Linklist* pcurr = L;
printf("enter data:");
scanf("%d", &pcurr->data);
for (int i = 1; i < n; i++) {
Linklist* tmp = (Linklist*)malloc(sizeof(Linklist));
if (L == NULL) {
printf("malloc error!\n");
return;
}
printf("enter data:");
scanf("%d", &tmp->data);
tmp->next = NULL;
pcurr->next = tmp;
pcurr = pcurr->next;
}
}
void show(Linklist* L) {
if (L == NULL) {
printf("this is null\n");
return;
}
while (L) {
printf("data is %d\n", L->data);
L = L->next;
}
}
int main() {
int n = 0;
Linklist* L = (Linklist*)malloc(sizeof(Linklist));
printf("init list!!!!!\n");
if (L == NULL) {
printf("malloc error!\n");
return -1;
}
memset(L, 0, sizeof(Linklist));
printf("enter length of list:");
scanf("%d", &n);
ScanfLinkList(L, n);
show(L);
return 0;
}
那個創建空間,就直接在main函式中創建一次就可以嗎,這個不太懂 大佬
你不是要以指標形式保存么,宣告一次,把附加的附到后面不就好了。
先假設你寫的程式別的問題沒有,單純說在函式體malloc的,生命周期也只有那個函式存活周期。所以你認為你把這個東西給了L,然后就可以呼叫函式show列印了。但是結果是沒有的。
因為傳到show的還是你第一次在main宣告的那個,你在連接node的函式中連接的那部分記憶體,被泄露了。也就是并沒有附加到L。所以L->next是空的,當然也就列印不出來了。
當然你的程式問題太多了,比如說釋放指標要free啊,然后你這個在main中宣告的指標也沒有初始化,這是野指標。。
如果你想要在函式體malloc然后再傳到外面,你可以宣告為static,這樣存活周期就和整個程式存活周期一樣了。
大佬 那個memset函式 那個加了和沒加的結果是一樣的嗎,那個具體是干什么的 不太明白,我沒加那個然后也是正常輸出了
uj5u.com熱心網友回復:
怎么說呢,代碼問題有點多。最主要的一點就是,在函式中宣告的,函式結束后就消失了。
我給你改寫了一下,你看看吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Linklist;
void ScanfLinkList(Linklist* L, int n) {
int i = 0;
Linklist* pcurr = L;
printf("enter data:");
scanf("%d", &pcurr->data);
for (int i = 1; i < n; i++) {
Linklist* tmp = (Linklist*)malloc(sizeof(Linklist));
if (L == NULL) {
printf("malloc error!\n");
return;
}
printf("enter data:");
scanf("%d", &tmp->data);
tmp->next = NULL;
pcurr->next = tmp;
pcurr = pcurr->next;
}
}
void show(Linklist* L) {
if (L == NULL) {
printf("this is null\n");
return;
}
while (L) {
printf("data is %d\n", L->data);
L = L->next;
}
}
int main() {
int n = 0;
Linklist* L = (Linklist*)malloc(sizeof(Linklist));
printf("init list!!!!!\n");
if (L == NULL) {
printf("malloc error!\n");
return -1;
}
memset(L, 0, sizeof(Linklist));
printf("enter length of list:");
scanf("%d", &n);
ScanfLinkList(L, n);
show(L);
return 0;
}
那個創建空間,就直接在main函式中創建一次就可以嗎,這個不太懂 大佬
你不是要以指標形式保存么,宣告一次,把附加的附到后面不就好了。
先假設你寫的程式別的問題沒有,單純說在函式體malloc的,生命周期也只有那個函式存活周期。所以你認為你把這個東西給了L,然后就可以呼叫函式show列印了。但是結果是沒有的。
因為傳到show的還是你第一次在main宣告的那個,你在連接node的函式中連接的那部分記憶體,被泄露了。也就是并沒有附加到L。所以L->next是空的,當然也就列印不出來了。
當然你的程式問題太多了,比如說釋放指標要free啊,然后你這個在main中宣告的指標也沒有初始化,這是野指標。。
如果你想要在函式體malloc然后再傳到外面,你可以宣告為static,這樣存活周期就和整個程式存活周期一樣了。
大佬 那個memset函式 那個加了和沒加的結果是一樣的嗎,那個具體是干什么的 不太明白,我沒加那個然后也是正常輸出了
我寫那個就是把記憶體清零的,初始化嘛,要養成好習慣啊
uj5u.com熱心網友回復:
怎么說呢,代碼問題有點多。最主要的一點就是,在函式中宣告的,函式結束后就消失了。
我給你改寫了一下,你看看吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
}Linklist;
void ScanfLinkList(Linklist* L, int n) {
int i = 0;
Linklist* pcurr = L;
printf("enter data:");
scanf("%d", &pcurr->data);
for (int i = 1; i < n; i++) {
Linklist* tmp = (Linklist*)malloc(sizeof(Linklist));
if (L == NULL) {
printf("malloc error!\n");
return;
}
printf("enter data:");
scanf("%d", &tmp->data);
tmp->next = NULL;
pcurr->next = tmp;
pcurr = pcurr->next;
}
}
void show(Linklist* L) {
if (L == NULL) {
printf("this is null\n");
return;
}
while (L) {
printf("data is %d\n", L->data);
L = L->next;
}
}
int main() {
int n = 0;
Linklist* L = (Linklist*)malloc(sizeof(Linklist));
printf("init list!!!!!\n");
if (L == NULL) {
printf("malloc error!\n");
return -1;
}
memset(L, 0, sizeof(Linklist));
printf("enter length of list:");
scanf("%d", &n);
ScanfLinkList(L, n);
show(L);
return 0;
}
那個創建空間,就直接在main函式中創建一次就可以嗎,這個不太懂 大佬
你不是要以指標形式保存么,宣告一次,把附加的附到后面不就好了。
先假設你寫的程式別的問題沒有,單純說在函式體malloc的,生命周期也只有那個函式存活周期。所以你認為你把這個東西給了L,然后就可以呼叫函式show列印了。但是結果是沒有的。
因為傳到show的還是你第一次在main宣告的那個,你在連接node的函式中連接的那部分記憶體,被泄露了。也就是并沒有附加到L。所以L->next是空的,當然也就列印不出來了。
當然你的程式問題太多了,比如說釋放指標要free啊,然后你這個在main中宣告的指標也沒有初始化,這是野指標。。
如果你想要在函式體malloc然后再傳到外面,你可以宣告為static,這樣存活周期就和整個程式存活周期一樣了。
大佬 那個memset函式 那個加了和沒加的結果是一樣的嗎,那個具體是干什么的 不太明白,我沒加那個然后也是正常輸出了
我寫那個就是把記憶體清零的,初始化嘛,要養成好習慣啊
還有那個輸入函式,為啥是兩次輸入呢,沒怎么明白 ?? 能告訴下嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122304.html
標籤:C語言
下一篇:封裝小型管理系統
