※ 引述《Ctmate (City*Mate)》之銘言:
: 我要從input檔中讀入多項式的資料
: num cof 分別放係數跟指數
: 如果我要把他弄成動態記憶體要怎麼弄呢?
: 怎麼跑都跑不太過...
: #include <stdio.h>
: #include <stdlib.h>
: int main (void)
: {
: int k,i,y;
: int **num; //原先是直接給大小 int num[10][10];
: num = (int*)malloc(0);
這樣只會new出一個int* 大小為0,而且type也跟左值不一致,這很明顯不是你想要的
假設現在是要num[k][k]
那你應該改成 num=(int**)malloc( k*sizeof(int*) );
這樣,new出了一個int** 指向k格int*大小
之後再把new的每一格 去(int*)malloc( k*sizeof(int) );
那才是你要的
: int **cof; //原先是直接給大小 int cof[10][10];
: cof = (int*)malloc(0);
同上
: fp = fopen("input.txt", "r");
: fscanf (fp, "%d" ,&k);
: for (i=0;i<2*k;i++)
: {
: y=0;
: fscanf(fp, "%d %d",&num[i][y],&cof[i][y]);
: num[2*(i+1)]=(int*)malloc(y+1);
: cof[2*(i+1)]=(int*)malloc(y+1);
malloc(int _size) 參數裡面是要放空間的大小
這邊似乎不是你的本意?
: while ((num[i][y]!=0 || cof[i][y]!=0))
: {
: y++;
: fscanf(fp, "%d %d\n",&num[i][y],&cof[i][y]);
: num[2*(i+1)]=(int*)malloc(y+1);
: cof[2*(i+1)]=(int*)malloc(y+1);
阿哩
上面不是new過了 怎麼這邊又new @@"
: }
: }
我個人猜測你現在的code跟你想要做的事情不太一樣
通常二維陣列讀入大小之後,就應該跑回圈把每一格都new出來
接著就把他當成普通的陣列使用
最後再記得free
建議你可能要再研究一下malloc的用法
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.93.39
※ 編輯: nowar100 來自: 140.113.93.39 (10/18 02:14)