#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
int length;
int *arr;
}sqlist;
int initlist_sq(sqlist num)
{
num.arr=(int*)malloc(sizeof(int)*(max_size));
if(!num.arr)
exit(EXIT_FAILURE);
num.length=0;
return 0;
}
int main()
{
sqlist num;
int i,n,flag;
flag=initlist_sq(num);
if(flag) printf("allocation failed\n");//判斷分配記憶體是否成功
else printf("successful\n");
scanf("%d",&num.length);
for(i=0;i<num.length;i++)//問題所在
scanf("%d",&num.arr[i]);
return 0;
}
假設我們輸入length為5,為什么到for回圈scanf那里就程式就停止了?輸入不了。
我記得在分配記憶體后是可以把它當做陣列來看待的。
uj5u.com熱心網友回復:
你的這個記憶體泄露了uj5u.com熱心網友回復:
沒問題,就等著你輸入 ,多按幾次回車uj5u.com熱心網友回復:
修改如下,供參考:#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
int length;
int *arr;
}sqlist;
int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
num.arr=(int*)malloc(sizeof(int)*(max_size));
if(!num.arr)
exit(EXIT_FAILURE);
num.length=0;
return 0;
}
int main()
{
sqlist num;
int i,n,flag;
flag=initlist_sq(num);
if(flag) printf("allocation failed\n");
else printf("successful\n");
scanf("%d",&num.length);
for(i=0;i<num.length;i++)
scanf("%d",&num.arr[i]);
return 0;
}
uj5u.com熱心網友回復:
你就只是加了個&吧。加了之后連編譯都不通過了,而且我們定義的num也不是指向結構體的指標變數吧。
uj5u.com熱心網友回復:
不行的,到那里就直接跳出了
uj5u.com熱心網友回復:
我去網上查了一下記憶體泄露是指我沒用free,不過現在這個不是輸入不了的原因吧
uj5u.com熱心網友回復:
我這里是運行通過的,沒出現你說的編譯問題:

這個初始化int initlist_sq(sqlist num)函式里的num和main()函式里的num是兩個不同記憶體空間,不通過地址讓他們產生聯系,光值沒用啊。
uj5u.com熱心網友回復:
initlist里面的 num是main里面的副本,在那個函式里的任何操作對于main 里面的num無效uj5u.com熱心網友回復:
修改如下,供參考:#include <stdio.h>
#include <stdlib.h>
#define max_size 100
typedef struct
{
int length;
int *arr;
}sqlist;
int initlist_sq(sqlist &num) //int initlist_sq(sqlist num)
{
num.arr=(int*)malloc(sizeof(int)*(max_size));
if(!num.arr)
exit(EXIT_FAILURE);
num.length=0;
return 0;
}
int main()
{
sqlist num;
int i,n,flag;
flag=initlist_sq(num);
if(flag) printf("allocation failed\n");
else printf("successful\n");
scanf("%d",&num.length);
for(i=0;i<num.length;i++)
scanf("%d",&num.arr[i]);
return 0;
}
你就只是加了個&吧。加了之后連編譯都不通過了,而且我們定義的num也不是指向結構體的指標變數吧。
我這里是運行通過的,沒出現你說的編譯問題:
這個初始化int initlist_sq(sqlist num)函式里的num和main()函式里的num是兩個不同記憶體空間,不通過地址讓他們產生聯系,光值沒用啊。
我剛剛查了一下,發現你這個引數串列中加的取地址運算子是C++語法的,我這個是C語言的,所以沒法直接,我剛付訓成指標就成功了。真心感謝你!
uj5u.com熱心網友回復:
initlist里面的 num是main里面的副本,在那個函式里的任何操作對于main 里面的num無效
嗯嗯,我把這個給忘記了。謝謝謝謝謝謝~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259584.html
標籤:C語言
下一篇:小白請教!!關于二叉樹的建立問題(Run-Time Check Failure #2 - Stack around the variable 'tre)
