使用IAR EW430 4.21 应该可以用malloc函数吧 我利用链表存数之后,在VC6.0中显示可以存入,但是在IAR中编译就会有问题,显示是0 为什么呢? 程序如下:
# include "stdlib.h"
# include "io430.h"
struct Node
{
int data;
struct Node *pNext;
};
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
int a[256] = {301,283,276,263,254,242,236,230,218,212,
205,206,211,212,217,212,212,212,211,218,
218,218,218,224,218,224,218,218,217,217,
222,224,224,230,236,242,242,242,242,242,
239,236,230,230,230,236,240,248,248,248,
240,230,228,218,218,221,228,230,224,228,
230,230,230,230,228,230,230,234,230,224,
224,222,224,227,230,240,236,236,236,239,
240,239,236,236,240,240,239,236,236,242,
240,242,242,242,234,230,230,230,236,242,
239,240,242,257,277,300,325,343,347,348,
343,334,313,289,270,254,242,234,230,228,
230,224,224,222,224,230,224,228,230,224,
230,230,230,248,289,372,526,787,1165,1546,
1861,1954,1754,1398,930,424,76,-67,-90,-49,
4, 52, 82, 76, 70, 82, 102,117,117,123,
135,150,165,165,171,182,188,194,200,205,
215,227,230,246,260,271,283,283,289,295,
307,325,337,348,354,366,384,394,402,414,
420,431,443,455,467,467,461,455,443,442,
440,431,431,420,402,390,378,366,360,348,
337,313,295,283,270,257,246,234,224,224,
209,200,187,176,174,165,171,169,165,168,
165,165,171,171,171,171,175,182,182,181,
181,176,182,185,188,194,199,200,199,194,
200,208,206,206,212,211} ;
int b[256] = {0} ;
int i , j , k , m , n ;
n = 0 ;
m = a[0] ;//第一个数据要另外保存
b[0] = 125 ;//125作为判断的阈值
//b[1] = a[1] - a[0] ;
for (i = 1 ; i < 256 ; i++)
b = a - a[i-1] ;//一阶差分保存在数组中
for (j = 0 ; j < 256 ; j++)
{
if ( ( b[j] >= 125 ) || ( b[j] <= -125) )
{
n = n + 1 ;
}
};
/*以上程序运行无错误,可以得到正确个数的n值,下面要考虑如何存储n表示的较大的数
已经确定用链表来做*/
struct Node *pHead , *p ,*q ;
pHead = NULL ;
q = NULL ;
p = (struct Node *)malloc(sizeof(struct Node));//*p中存的是地址,利用结点变量的名字*p访问结点分量
/*以上建立了第一个节点,*p指向首地址,此时应该将b[0]存入其中*/
p -> data = 3 ; ///问题在这里,仿真时下载后,我在watch栏中输入p->data追踪值,结果显示是0,为什么呐?
j = 255 ;
/* for (k = 0 ,k < 256 ,k++)
{
if ( ( b[k] >= 125 ) || ( b[k] <= -125) )
{
p->data = b[k];
p = p+1;
}
}*/
return 0;
} |