gpt4 book ai didi

c++ - 使用 qsort() 时写入访问冲突

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:30 26 4
gpt4 key购买 nike

我正在使用 qsort C++ 函数。我在插入函数中传递了 wordArr。目标是对属于 wordArr 的每个单词的字母进行排序。但是,在使用 qsort 时,我遇到了写访问冲突。请告诉我,我的错误在哪里。

char* wordArr[]={"cat","bat","dog"};

int tableClass::compChar(const void* a, const void* b)//in my header file this is static
{
return *(const char*)a - *(const char*)b;
}
void tableClass::insert(char* wordArr[],const int size)
{
for (int i = 0; i < size; i++)
{
qsort(wordArr[i], strlen(wordArr[i]), sizeof(char),tableClass::compChar);

}

}

最佳答案

你的代码有几个问题:

1)参数不对,看文档

2) 您正在尝试通过重新排序指向分配到只读区域中的字符串的指针数组来修改只读内存。这是不允许的,并且可能导致未定义的行为,即任何事情都可能发生。

我建议使用 std::sort对于这种事情,可能使用 STL vector

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

void sort_stuff(std::vector<std::string>& arr)
{

sort(arr.begin(), arr.end());
}

bool myfunction (char *i,char *j) {

int res = strcmp(i,j); // Needed to compare all characters

return (res < 0) ? true : false; // Weak ordering criterion
}

int main() {
std::vector<std::string> arr;
arr.push_back("cat");
arr.push_back("dog");
arr.push_back("bat");

sort_stuff(arr);

// --- edit: if you really want to use a char array ---

char cat[] = "cat";
char bat[] = "bat";
char dog[] = "dog";
char* wordArr[]={cat, bat, dog};
sort(wordArr, wordArr+sizeof(wordArr)/sizeof(char*), myfunction);
cout << wordArr[0] << wordArr[1] << wordArr[2];

return 0;
}

在线试用:http://ideone.com/ErEWnb


编辑:我不确定你为什么真的想使用字符数组,但如果你真的需要它,你应该

1) 将它们放入可写内存(例如本地内存,而不是字符串文字)2) 指定比较函数,因为如果您直接将 char 指针数组传递给 sort,您将比较指针而不是它们指向的数据。并确保比较字符串的所有字符。 strcmp 做你想做的事

bool myfunction (char *i,char *j) {

int res = strcmp(i,j); // Needed to compare all characters

return (res < 0) ? true : false; // Weak ordering criterion
}

...

char cat[] = "cat";
char bat[] = "bat";
char dog[] = "dog";
char* wordArr[]={cat, bat, dog};
sort(wordArr, wordArr+sizeof(wordArr)/sizeof(char*), myfunction);
cout << wordArr[0] << wordArr[1] << wordArr[2];

关于c++ - 使用 qsort() 时写入访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23438965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com