user-0 提问: 结构体中指针属性的释放问题

回复:
user: user-1
content: 引用 12 楼 asdfg48_ 的回复:[quote=引用 11 楼 sholber 的回复:] [quote=引用 10 楼 asdfg48_ 的回复:] [quote=引用 8 楼 anshiny 的回复:] [quote=引用 7 楼 sholber 的回复:] 还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。[/quote]  anshinyf分析的很正确，的确是在释放空间时出现了问题，循环释放500次时出现bug[/quote] 你的代码： char *RecordDate[Max_Record_Number][Max_Attribute_Number]; //训练数据 你告诉我Max_Record_Number和Max_Attribute_Number的值是多少？[/quote]  刚才在跑程序，经过anshinyf的指点，扩大申请空间train_data->RecordData[i][j]=(char *)malloc(sizeof(char  )+5);，然后在释放，内存平缓，一点都不波动，程序顺利执行完毕。谢谢你和anshinyf。 Max_Record_Number 的值是2200，Max_Attribute_Number是10，当然啦，我在帖子中提到的100,6并不是程序中的值，仅仅是为了简洁，易懂。真实值是传参获得的[/quote]  有些原因只是表像 说明你的程序还是有问题。

user: user-0
content: 引用 11 楼 sholber 的回复:[quote=引用 10 楼 asdfg48_ 的回复:] [quote=引用 8 楼 anshiny 的回复:] [quote=引用 7 楼 sholber 的回复:] 还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。[/quote]  anshinyf分析的很正确，的确是在释放空间时出现了问题，循环释放500次时出现bug[/quote] 你的代码： char *RecordDate[Max_Record_Number][Max_Attribute_Number]; //训练数据 你告诉我Max_Record_Number和Max_Attribute_Number的值是多少？[/quote]  刚才在跑程序，经过anshinyf的指点，扩大申请空间train_data->RecordData[i][j]=(char *)malloc(sizeof(char  )+5);，然后在释放，内存平缓，一点都不波动，程序顺利执行完毕。谢谢你和anshinyf。 Max_Record_Number 的值是2200，Max_Attribute_Number是10，当然啦，我在帖子中提到的100,6并不是程序中的值，仅仅是为了简洁，易懂。真实值是传参获得的

user: user-1
content: 引用 10 楼 asdfg48_ 的回复:[quote=引用 8 楼 anshiny 的回复:] [quote=引用 7 楼 sholber 的回复:] 还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。[/quote]  anshinyf分析的很正确，的确是在释放空间时出现了问题，循环释放500次时出现bug[/quote] 你的代码： char *RecordDate[Max_Record_Number][Max_Attribute_Number]; //训练数据 你告诉我Max_Record_Number和Max_Attribute_Number的值是多少？

user: user-0
content: 引用 8 楼 anshiny 的回复:[quote=引用 7 楼 sholber 的回复:] 还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。[/quote]  anshinyf分析的很正确，的确是在释放空间时出现了问题，循环释放500次时出现bug

user: user-1
content: 引用 8 楼 anshiny 的回复:[quote=引用 7 楼 sholber 的回复:] 还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。[/quote]  同样没有证据证明，free函数的工作需要判断内存空间存放的是什么数据。

user: user-2
content: 引用 7 楼 sholber 的回复:还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。 他的代码中，所分配的空间里存放的是字符串，如果空间太小，没有把串末'\0'放进去，在释放空间的时候，可能会有问题。

user: user-1
content: 引用 6 楼 anshiny 的回复:原因可能是你的空间分配太小，不足以容纳相应的数据： train_data->RecordData[i][j]=(char *)malloc(sizeof(char )+2); 你试着加大空间，看看怎么样： train_data->RecordData[i][j]=(char *)malloc(sizeof(char )+5);  还有这样荒谬的事情。malloc会因为申请的空间太小而失败，你给出一个权威的文档出处来（我不要百度结果，我要标准文档）。

user: user-2
content: 原因可能是你的空间分配太小，不足以容纳相应的数据： train_data->RecordData[i][j]=(char *)malloc(sizeof(char )+2); 你试着加大空间，看看怎么样： train_data->RecordData[i][j]=(char *)malloc(sizeof(char )+5);

user: user-1
content: 既然已经定义了Max_Record_Number和Max_Attribute_Number， 为什么不用，而非得用100和6？ 如果Max_Record_Number < 100 或者Max_Attribute_Number小于6 怎么破？

user: user-0
content: 引用 3 楼 focuslight 的回复:for(int j=0;j<6;j++)                    free(train_data->RecordData[][j]); 引用 3 楼 focuslight 的回复:for(int j=0;j<6;j++)                    free(train_data->RecordData[][j]); 为什么要这样做呢？？

user: user-3
content: for(int j=0;j<6;j++)                    free(train_data->RecordData[][j]);

user: user-0
content: 引用 1 楼 user-4 的回复:马克。看大神分析。  大神，指点下吧，小弟迷茫好久了

user: user-4
content: 马克。看大神分析。