指针字符串数组比较其中字符串大小,显示无法读取内存。求助大佬

weixin_45669978 2019-11-13 04:11:30
#include<iostream>
#include<string>
using namespace std;
int main()
{
char* a[4];
int i, min,n,t;
for (i = 0; i < 4; i++)
{
a[i] = (char*)malloc(sizeof(char) * 100); //动态分配
cin >> a[i]; //输入
}
for (i=0;i<3;i++) //排序
{
min = i;
for (n = 0; n < 3; n++)
{
t=strcmp(a[i], a[n + 1]);
if (t > 0)
min = n + 1;
}
swap(*a[i], *a[n + 1]);
}
for (i = 0; i < 4; i++)
{
cout << *(a + i);
free(a[i]);
}
}
为什么会显示什么权限冲突之类的??
...全文
114 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2019-11-13
  • 打赏
  • 举报
回复
1 swap交换函数参数里面不应该有*, swap(a[i], a[n+1]) 这样才对
2 这个排序算法本身就有问题, a[n+1] 如果从前面的循环出来的时候n是3, 不就越界了吗
比如strcmp三次比较返回都是-1, 退出循环的时候n就是3, a[n+1]就越界
根本就没看明白这是一个什么排序算法

3 输出 cout << a【i】就好了, 搞那个 *a【i+1】 是要输出一个字母吗, 什么意思?
weixin_45669978 2019-11-13
  • 打赏
  • 举报
回复
搞定了,谢啦
weixin_45669978 2019-11-13
  • 打赏
  • 举报
回复
铖邑 2019-11-13
  • 打赏
  • 举报
回复
你这个程序太多问题了,好好改改吧
铖邑 2019-11-13
  • 打赏
  • 举报
回复
并且,你这个是选择法排序吧?n是从i+1开始循环的!而且,你交换之前都没有判断交换的是不是同一个东西。再且,你比较的i n+1也不对,应该和min比较。最后,你cout输出也是错的,应该是a[i]!!!
铖邑 2019-11-13
  • 打赏
  • 举报
回复
交换什么哪?*a[i]那可是字符!
weixin_45669978 2019-11-13
  • 打赏
  • 举报
回复
啊??!swap不是交换函数吗
铖邑 2019-11-13
  • 打赏
  • 举报
回复
swap是什么鬼啊?这个都不对啊

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧