- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试建立一个哈希表和一些用于设置、获取和删除表中值的过程。我们在第 35 行和第 53 行遇到“条件跳转或移动取决于未初始化的值”问题。
==23720== Conditional jump or move depends on uninitialised value(s)
==23720== at 0x400CF6: hash (hashserver.c:35)
==23720== by 0x400D49: set (hashserver.c:53)
==23720== Uninitialised value was created by a stack allocation
==23720== at 0x40112A: main (hashserver.c:133)
为了防止哈希表中发生冲突,我们将使用链表进行单独链接。你能帮忙吗?谢谢!
typedef struct KeyVal {
unsigned char* value;
unsigned char* key;
struct KeyVal* next;
}KeyVal;
unsigned long hash (unsigned char *str)
{
unsigned long hash = 5381;
int c;
(line 35) -> while (c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash%MAXHASHTABLEN;
}
int set(KeyVal *hashtable[], unsigned char* key, unsigned char* value){
(line 53)-> unsigned long hval = hash(key);
if(hashtable[hval] == NULL){
KeyVal* runvar = calloc(1, sizeof(KeyVal));
runvar->key = key;
runvar->value = value;
runvar->next = NULL;
hashtable[hval] = runvar;
fprintf(stdout, "Successful set 1\n");
return 1;
} else {
KeyVal* counter = hashtable[hval];
KeyVal* prev = counter;
while(counter!= NULL){
prev = counter;
counter = counter->next;
}
KeyVal* runvar = calloc(1, sizeof(KeyVal));
runvar->key = key;
runvar->value = value;
runvar->next = NULL;
prev->next = runvar;
fprintf(stdout, "Successful set 2\n");
return 2;
}
return -1;
}
(line 133) -> int main(int argc, char *argv[]){
int sock, new, status, command;
struct addrinfo hints, *serverinfo, *p;
struct sockaddr_storage their_addr;
socklen_t sin_size;
int yes = 1;
char s[INET6_ADDRSTRLEN];
unsigned int numbytes = 0;
char buffer[128];
int line, transid, bitcounter = 0;
unsigned short keylenMSB, keylenLSB, keylen, vallenMSB, vallenLSB, vallen = 0;
KeyVal *hashtable[MAXHASHTABLEN];
}
这是一个使用RPC的练习,我们通过这种方式接收来自客户端的命令。最后我们调用 set() 函数:
unsigned char keybuf[MAXBUFFERLEN], valbuf[MAXBUFFERLEN] = {0};
while(1) {
sin_size =(socklen_t) sizeof(their_addr);
new = accept(sock, (struct sockaddr *)&their_addr, &sin_size);
if (new == -1) {
perror("accept");
continue;
}
inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s);
printf("server: got connection from %s\n", s);
if((numbytes = recv(new, buffer, sizeof(buffer), 0)) < 0){
perror("recv");
exit(1);
}
printf("%d\n", numbytes);
for(line = 0; line < numbytes; ++line){
printf("Byte#%d = ",line);
for(bitcounter = 0; bitcounter < 8; bitcounter++){
printf("%d ", (buffer[line] >> bitcounter)&1);
}
printf("\n");
switch(line){
case 0: switch(buffer[line]) {
case 1: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*D*/ break;
case 2: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*S*/ break;
case 3: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*SD*/ break;
case 4: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*G*/ break;
case 5: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*GD*/ break;
case 6: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*SG*/ break;
case 7: command = (buffer[line]); fprintf(stdout, "line = %d, command = %d\n", line, command); /*SGD*/ break;
default: fprintf(stdout,"Not a valid command\n"); /*Fehlermeldung*/ break;
}
case 1: transid = buffer[line]; break;
case 2: keylenMSB = buffer[line]; keylenMSB = keylenMSB << 8; break;
case 3: keylenLSB = buffer[line]; keylen = keylenMSB|keylenLSB; ; break;
case 4: vallenMSB = buffer[line]; vallenMSB = vallenMSB << 8; break;
case 5: vallenLSB = buffer[line]; vallen = vallenMSB|vallenLSB; break;
default: if(line < numbytes - vallen){
keybuf[line - 6] = buffer[line];
} else if(vallen > 0){
valbuf[line-6-keylen] = buffer[line];
}
}
}
switch(command){
case 1: delete(hashtable, keybuf); /*D*/ break;
case 2: set(hashtable, keybuf, valbuf); /*S*/ break;
case 4: get(hashtable, keybuf, valbuf); /*G*/ break;
case 3: set(hashtable, keybuf, valbuf); delete(hashtable, keybuf); /*SD*/ break;
case 6: set(hashtable, keybuf, valbuf); get(hashtable, keybuf, valbuf); /*SG*/ break;
case 5: get(hashtable, keybuf, valbuf); delete(hashtable, keybuf); /*GD*/ break;
case 7: set(hashtable, keybuf, valbuf); get(hashtable, keybuf, valbuf); delete(hashtable, keybuf); /*SGD*/ break;
default: fprintf(stdout,"Unknown command.\n")/*Fehlermeldung*/; break;
}
buffer[0] = buffer[0]|0b00001000;
send(new, buffer, sizeof(buffer), 0);
for(line = 0; line < numbytes; ++line){
printf("Sending Byte#%d = ",line);
for(bitcounter = 0; bitcounter < 8; bitcounter++){
printf("%d ", (buffer[line] >> bitcounter)&1);
最佳答案
我在您的代码中看到几个字符缓冲区,您是否尝试将它们用作键?例如,您可以像这样初始化它们:
char s[INET6_ADDRSTRLEN] = "";
此代码模拟完全相同的行为:
#include <stdio.h>
unsigned int hash(char *str) {
unsigned int hash = 5381;
int c;
while ((c = *str++))
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash % 128;
}
int main(int argc, char *argv[]) {
char initialized[20] = "hello";
printf("hash(initialized) = %u\n", hash(initialized));
char not_initialized[20];
printf("hash(not_initialized) = %u\n", hash(not_initialized));
return 0;
}
关于c - 哈希表 "Uninitialised value was created by a stack allocation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40719913/
在编写代码时,当我编写 struct *Stack stack 时,代码无法工作,而当我像 struct Stack* stack 那样编写代码时,代码可以工作有人告诉我这两个代码之间的区别吗? 最佳
我的教授要我绘制堆栈吗?他想让我付诸行动吗?我觉得自己很愚蠢,但这不像任何人告诉我的那样!感谢您的帮助。 哇,你们真快。已经谢谢你了。完整的问题是:考虑两个堆栈,每个堆栈的大小为 n(即,每个堆栈最多
是new Stack[N]相当于new Stack[N]对于通用数据类型 Stack ? 编辑:虽然我知道最好避免混合泛型类型和数组,并且存在更强大的解决方案,但我的查询仍然存在:被广泛认可的教科书,
我正在尝试使用堆栈的 printf() 打印 stack.top() 的返回值,但它给出的格式不匹配。代码如下: int main(){ stack cards; char *ch1
我正在尝试做一个 dapp 项目。 我有一个堆栈太深的错误,但我不知道如何解决这个问题。 CompilerError: Stack too deep, try removing local varia
在哪里stack haddock (或 stack build --haddock )放置它生成的文档? 最佳答案 这取决于为“属于”生成黑线鳕的包的位置。 “本地”包的 Haddocks 是堆栈项目
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
基本上,我有 2 个文件(.adb 和 .ads)。我对 Ada 以及如何编译 2 个文件完全陌生。该程序是一个基本的堆栈实现。编译 .adb 文件时出现此编译错误。 $ gcc -c test_ad
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
您好,我正在尝试在微服务架构中使用 ELK 堆栈,其中有许多服务分布在许多服务器上。 现在我已经配置了 Kibana 和 ElasticSearch。现在我的疑问是我必须在哪里安装 Logstash。
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我正在学习 Haskell,但遇到了我没想到的异常“堆栈溢出”。 代码相当简单: type Reals = Double prod :: Reals -> Reals -> Reals prod a
在我的 PC(最新的 JDK 和编译器版本)上,我的程序运行得非常顺利。但在我教授的计算机上,她说她遇到了两个错误 1) Stack myStack= new Stack() 类型的非法开始 2) 非
当我尝试在调用跟踪后执行 ./stack.sh 时,我收到以下错误: `[Call Trace] ./stack.sh:217:source /home/work/devstack/stackrc
1 上下文 我参与了一个涉及大量 C 位和 FFI 的 Haskell 项目。所以我发现自己经常运行和重新运行命令,比如 $ stack build $ stack build --force-dir
关于 SO 上的堆栈的问题,终于!我的一生都让我走到了这一步。 所以我需要将我制作的一些相当大的自定义数据结构合并到一个堆栈中。我决定编写一个仅包含一个整数值的最小堆栈结构。这里是 - MODULE
我只是想知道为什么在括号之间嵌入表达式时会得到两个不同的成员列表,例如gl-stack。看起来,如果没有括号,表达式就会被完全求值,并且结果会立即传递到下一个管道组件。但通过括号,集合中的单个对象将被
是否可以保存Stack>在onSaveInstanceState . 是否可以通过另一种方式保存某些特定数据来管理 Activity 状态? 最佳答案 您无法将 View 保存到 bundle 中。无
这个问题已经有答案了: Why don't Java Generics support primitive types? (5 个回答) 已关闭 9 年前。 为什么我不能使用Stack ? 除了拳击之
基于数组的实现级别 #include "stack.h" void creat_stack(Stack *s) { s->Top = 0; } int isFull(Stack s) {
我是一名优秀的程序员,十分优秀!