void sortdata(struct data *p,int len)这个是我编写的程序中的一小段 我想进行以sum给标准的升序排序。但是为什么如果if()内的条件满足了运行交换语句程序就报错了呢 这是我设置断点得到的错误提示:
{
int i,j;
struct data *t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
*t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=*t;
}
}
}
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
23 个解决方案
#1
指针变量t没有分配空间
#2
struct data *t;改成struct data t;
你的指针t没有指向有效的内存空间,所以发生了段错误。不需要用指针就不要用了。
你的指针t没有指向有效的内存空间,所以发生了段错误。不需要用指针就不要用了。
#3
这问题不需要大神,我就能解决了
#4
void sortdata(/*struct*/ data *p,int len)
{
int i,j;
/*struct*/ data t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
//sort就sort,打印这些干嘛?
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
{
int i,j;
/*struct*/ data t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
//sort就sort,打印这些干嘛?
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
#5
+1
#6
sort了之后printf出来啊
#7
我在sortdata中定义了结构体指针t之后 令*t=4也出现这样的错误呀
#8
哈哈哈 知道我不知道的知识的都是大神! 嘻嘻~~
#9
struct data a;直接用*t=4是非法的。
struct data *t;
t=&a;//引用有效地址
t=(struct data*)malloc(sizeof(struct data));//分配有效内存
#10
还有,有malloc的地方,用完一定要手动free,不然会内存泄漏的。
#11
*t
t =??????
t =??????
#12
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
#13
struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
请问,此时t指向内存中的什么位置?
不知道,就别用。
#14
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
一针见血
#15
我在sortdata中定义了结构体指针t之后 令*t=4也出现这样的错误呀
指针变量t没有分配空间
关键不是你在哪里定义,而是定义指针变量后必须给它分配空间后才能往里面写内容,空间都没有,内容要写到哪儿
#16
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
#17
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
自己随意指定的地址仍然是非法的。就好比你不给指针分配值,那指针就没有指向的地址吗?显然是不对的。
C/C++不存在所谓的无值对象,也就是Objective-C里的NIL类型,所以指针都是有值的。
那为什么仍然无法访问?很简单,计算机只是锁住了这个内存,除非你建立了一个对象,或者向系统申请一块空间,这个时候系统就会打开这块空间的使用权,那你就能正常访问了。
但是,系统打开了使用权,却不是这个指针的默认地址,而是取了一个新的地址,然后又赋给了你。所以你根本就不可能知道计算机的有效地址在哪里,因此t=4 99%是非法的。
你要么malloc一块地址,即像系统申请,要么就不要用指针了。这里其实用struct data t是最好的。没必要用什么指针:
struct data t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
#18
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
你知道“定义”和“申请内存”的区别?
#19
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?! struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
像你主楼定义这样呢?没有空间的!要额外申请空间,然后再赋值操作
搞一本基础的书籍,补下基础,重点指针这块!
#20
void sortdata(struct data *p,int len)这个是我编写的程序中的一小段 我想进行以sum给标准的升序排序。但是为什么如果if()内的条件满足了运行交换语句程序就报错了呢 这是我设置断点得到的错误提示:
{
int i,j;
struct data *t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
*t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=*t;
}
}
}
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
红色这行的问题
#21
ft,csdn请告诉我,为啥quote和加颜色不能嵌套。。。
for( j=i+1;j<len;j++)
for( j=i+1;j<len;j++)
#22
谁告诉你大神都在夜间出没的?
#23
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
自己随意指定的地址仍然是非法的。就好比你不给指针分配值,那指针就没有指向的地址吗?显然是不对的。
C/C++不存在所谓的无值对象,也就是Objective-C里的NIL类型,所以指针都是有值的。
那为什么仍然无法访问?很简单,计算机只是锁住了这个内存,除非你建立了一个对象,或者向系统申请一块空间,这个时候系统就会打开这块空间的使用权,那你就能正常访问了。
但是,系统打开了使用权,却不是这个指针的默认地址,而是取了一个新的地址,然后又赋给了你。所以你根本就不可能知道计算机的有效地址在哪里,因此t=4 99%是非法的。
你要么malloc一块地址,即像系统申请,要么就不要用指针了。这里其实用struct data t是最好的。没必要用什么指针:struct data t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
#1
指针变量t没有分配空间
#2
struct data *t;改成struct data t;
你的指针t没有指向有效的内存空间,所以发生了段错误。不需要用指针就不要用了。
你的指针t没有指向有效的内存空间,所以发生了段错误。不需要用指针就不要用了。
#3
这问题不需要大神,我就能解决了
#4
void sortdata(/*struct*/ data *p,int len)
{
int i,j;
/*struct*/ data t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
//sort就sort,打印这些干嘛?
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
{
int i,j;
/*struct*/ data t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
//sort就sort,打印这些干嘛?
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
#5
这问题不需要大神,我就能解决了
+1
#6
void sortdata(/*struct*/ data *p,int len)
{
int i,j;
/*struct*/ data t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
}
//sort就sort,打印这些干嘛?
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
#7
指针变量t没有分配空间
#8
这问题不需要大神,我就能解决了
#9
我在sortdata中定义了结构体指针t之后 令*t=4也出现这样的错误呀
指针变量t没有分配空间
struct data a;直接用*t=4是非法的。
struct data *t;
t=&a;//引用有效地址
t=(struct data*)malloc(sizeof(struct data));//分配有效内存
#10
还有,有malloc的地方,用完一定要手动free,不然会内存泄漏的。
#11
*t
t =??????
t =??????
#12
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
#13
struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
请问,此时t指向内存中的什么位置?
不知道,就别用。
#14
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
一针见血
#15
我在sortdata中定义了结构体指针t之后 令*t=4也出现这样的错误呀
指针变量t没有分配空间
关键不是你在哪里定义,而是定义指针变量后必须给它分配空间后才能往里面写内容,空间都没有,内容要写到哪儿
#16
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));
struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
#17
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
自己随意指定的地址仍然是非法的。就好比你不给指针分配值,那指针就没有指向的地址吗?显然是不对的。
C/C++不存在所谓的无值对象,也就是Objective-C里的NIL类型,所以指针都是有值的。
那为什么仍然无法访问?很简单,计算机只是锁住了这个内存,除非你建立了一个对象,或者向系统申请一块空间,这个时候系统就会打开这块空间的使用权,那你就能正常访问了。
但是,系统打开了使用权,却不是这个指针的默认地址,而是取了一个新的地址,然后又赋给了你。所以你根本就不可能知道计算机的有效地址在哪里,因此t=4 99%是非法的。
你要么malloc一块地址,即像系统申请,要么就不要用指针了。这里其实用struct data t是最好的。没必要用什么指针:
struct data t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
#18
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
你知道“定义”和“申请内存”的区别?
#19
struct data *t; //没有分配内存空间!使用的有内存出错的问题阿!
struct data *t = (struct data *)malloc(sizeof(struct data));我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?! struct data *t;
请问,此时t指向内存中的什么位置?
不知道,就别用。
像你主楼定义这样呢?没有空间的!要额外申请空间,然后再赋值操作
搞一本基础的书籍,补下基础,重点指针这块!
#20
void sortdata(struct data *p,int len)这个是我编写的程序中的一小段 我想进行以sum给标准的升序排序。但是为什么如果if()内的条件满足了运行交换语句程序就报错了呢 这是我设置断点得到的错误提示:
{
int i,j;
struct data *t;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if((p+i)->sum<(p+j)->sum)
{
*t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=*t;
}
}
}
for(i=0;i<len;i++,p++)
{
printf("number:%d\t",p->number);
printf("name:%s\t",p->name);
printf("chinese:%.1f\t",p->chinese);
printf("math:%.1f\t",p->math);
printf("english:%.1f\t",p->english);
printf("sum:%.1f\n",p->sum);
}
}
红色这行的问题
#21
ft,csdn请告诉我,为啥quote和加颜色不能嵌套。。。
for( j=i+1;j<len;j++)
for( j=i+1;j<len;j++)
#22
谁告诉你大神都在夜间出没的?
#23
我知道你们说的。 但是为什么我定义了struct data*t之后 令t=4 之后的交换也会出错呢?!
自己随意指定的地址仍然是非法的。就好比你不给指针分配值,那指针就没有指向的地址吗?显然是不对的。
C/C++不存在所谓的无值对象,也就是Objective-C里的NIL类型,所以指针都是有值的。
那为什么仍然无法访问?很简单,计算机只是锁住了这个内存,除非你建立了一个对象,或者向系统申请一块空间,这个时候系统就会打开这块空间的使用权,那你就能正常访问了。
但是,系统打开了使用权,却不是这个指针的默认地址,而是取了一个新的地址,然后又赋给了你。所以你根本就不可能知道计算机的有效地址在哪里,因此t=4 99%是非法的。
你要么malloc一块地址,即像系统申请,要么就不要用指针了。这里其实用struct data t是最好的。没必要用什么指针:struct data t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;