gpt4 book ai didi

c - Valgrind 错误 : conditional jump or move depends on uninitialised value(s) - C

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:32 36 4
gpt4 key购买 nike

我正在尝试编写一个程序来接收消息并读取它们。然后根据这些消息是什么打印出一些文本。由于这是 valgrind 警告我的代码部分,我将其留在那里供您查看。据我在网上阅读,应该有一个初始化问题,但我不知道在哪里。

int main(int argc, char* argv[])
{
int oprimek = 0;
char name[] = "/cmdQueue";
char msg[255];
msg[256]='\0';
char submsg1[5];
submsg1[6]='\0';
char submsg2[250];
submsg2[251]='\0';
int len=0;
int x=0;
struct mq_attr atr;
atr.mq_maxmsg = 5;
atr.mq_msgsize = 255;
oprimek = mq_open(name,O_RDWR|O_CREAT|O_EXCL,0660, &atr);
if(oprimek == -1){
perror("error");
mq_unlink(name);
return -1;
}
time_t sek;
int size=0;
while(1){
mq_getattr(oprimek,&atr);
if(atr.mq_curmsgs>0){
size=mq_receive(oprimek, msg, atr.mq_msgsize,0);
if(size==0){
printf("Length is 0.");
}else{
len=strlen(msg);
msg[len]='\0';
strncpy(submsg1,msg,5);
submsg1[5]='\0';
if(strcmp(msg, "datum")==0){
time(&sek);
printf("%s", ctime(&sek));
}
else if(strcmp(submsg1,"izpis")==0){
x=0;
while(x<len){
submsg2[x]=msg[5+x+1];
x++;
}
printf("%s\n",submsg2);
}
else if(strcmp(msg,"zakljuci")==0){
printf("Turning off!\n");
return 1;
}
else{
printf("Unknown message: %s \n",msg);
}
}
}
}
mq_close(oprimek);
mq_unlink(name);
return 0;
}

最佳答案

更大的问题,在我看来是

 msg[256]='\0';
submsg1[6]='\0';
submsg2[251]='\0';

而您将数组的长度分别定义为 2555250。有效访问是索引 0size-1

在这里,您正在访问调用undefined behavior 的绑定(bind)内存。 .一旦您达到 UB,就没有什么可以保证的了。

关于c - Valgrind 错误 : conditional jump or move depends on uninitialised value(s) - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41525065/

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