返回目录:游戏资讯
这种问题最好能贴出错误知信息,给出一些自己对错误的描述,给出出错代码道的位置,换句话说就是你先自己单步运行调试一下,尝试解决问题,如果解决不了再提版出问题,别人也愿意探讨。这样直接堆砌代码,让别人从头分析代码,大部分人是权没有这个耐心的。
main函数中的写法改下:
int main() {
char *str[]= {"123","12","1"};
char s[4] = "123";
str[0] = s;
puts(longestCommonPrefix(str , 3));
return 0;
}
你的代来码longestCommonPrefix中直接修改了strs[0]中存储的数据。源而传入的strs是一个指针数组strs[0]指向的位置是静态区的内存,不可修改。zhidao所以会运行出错。
关键在char *str[]= {"123","12","1"};这里,str是一个指针数组,通过{}来初始化数组的每个指针,注意这里赋值的是"123"这个静态串的地址给str[0]。这里的确分配了空间,并初始化了值;但是分配的是3个指针的空间,初始化的是三个指针的值。
malloc一块内存e799bee5baa6e78988e69d83339,只要这块内存足够你要表示的数据或对象的大小,你可以用这块内存表示任意一种类型的数据或对象。
举个例子
你可以int *p = (int *)malloc(4);
你同样可以DWORD *p = (DWORD *)malloc(4);
malloc的时候 系统并不管你这块内存被谁用
至于编译器怎么知道Next成员的,是通过 .运算符 和 ->运算符计算出来的
struct list
{
int Num;
int Data;
struct list *Next;
};
编译器在编译这个结构体的时候就已经知道list总共是12字节,第一个4字节是Num,第二个4字节是Data,第三个4字节是Next;只要你将一块 >=12字节 的内存块传给struct list *p,那么p->Num:编译器就自己对应前4字节,p->Data对应第2个4字节,p->Next对应第3个4字节,如果内存块大于12字节,后面多余的内存不对应任何值。
template<class T>int List<T>::Length() const
{ LinkNode<T>*
current = first ;
int elemnum=0;
while(current->link !
= NULL)//如果头结点指针域为NULL则不执行循环直接返回0值 {
current = current->link ;
elemnum++; }
return elemnum;}//返回头指针template<class T>
LinkNode<T>* List<T>::getHead() const{
return first ;}//搜索并返回指针template<class T>LinkNode<T>*
List<T>::Search(T x) const{
LinkNode<T>* current = first->link ;
//current = first 循环的判断写成
current->link != NULL ,
是等价的 while(current != NULL)
{ if(current->data == x)
break;
else
current = current->link ;
} return current ;/
/定位并返回指针template<class T>LinkNode<T>* List<T
>::Locate(int i)const//定位可能I为
{ //cout
<<"hello3"
<<endl;
cout
<<current->data<<endl;
current = current->link;
}} //排序template<class T
>void List<T>::Sort()
{ LinkNode<T>
current1,*current2 ;
for(current1=first->
link;current1!=NULL;
current1=current1->link)
{
//int flag=0;//插入标志不适用最小选择排序
for(current2=current1->
link;current2!=NULL;current2=current2->
link) {
if(current1->data
> current2->data)
{
//flag=1;
T temp;
temp=current1->data;
current1->data=current2->data;
current2->data=temp;
}
}
//if(flag==0) //
{ // cout<<"提前排序完成"<<endl; //
break; //} }
}
Head=(Link)malloc(MAX*sizeof Node)分配了10个Node,Next变量已经有了,但是Next变量你没赋值,你应该是希望Head[0].Next = &Head[1];Head[1].Next = &Head[2];等等