【发布时间】:2013-02-18 23:48:59
【问题描述】:
当我运行这段代码时,我遇到了分段错误,但如果我将 result 更改为 blah 它运行得很好。我已经尝试了有符号/无符号、sscanf/atoi、初始化/非、int/char 的所有排列,甚至直接使用指针而不是作为参数。
我知道它的 char* 不为空。唯一的变化是变量的名称。
有人知道这是什么原因吗?真是奇怪……
编辑:此文件的范围内没有其他变量。
编辑:它似乎与return 有关。如果我返回使用的值,我会得到一个错误,但控制在崩溃之前永远不会离开函数。
unsigned int getHashValue(char* key, char** table, unsigned int tableCount)
{
int i = 0;
//unsigned int length = strnlen(key,1024);
unsigned int length = 1024;
printf("Hashing...\n");
unsigned int blah;
int result;
for (i=0;i<tableCount;i+=2)
{
printf("i: %i\n",i);
if (strncmp(key,table[i],length)==0)
{
printf("found %s\n", table[i+1]);
/*sscanf()*/
result = (unsigned int) atoi(table[i+1]);
//blah = atoi(table[i+1]);
//sscanf(table[i+1],"%i",&result);
return result;
}
}
printf("..done\n");
return 0;
}
【问题讨论】:
-
可能是内存损坏
-
重启后这段代码是否仍然失败?另外,您的设置/编译器等是什么?
-
在您的代码中,您正在执行一个非常长的字符串比较
strncmp(key,table[i],length),其中长度为 1024。您确定key和table是至少 1024 个字符的字符串吗? -
分段错误在哪里准确?
-
@Ganesh:
strncmp停止在终止零或达到请求的长度时 - 无论先到。所以,如果字符串是以零结尾的,那么如果它们短于 1024 就可以了。
标签: c