多个printf无法正常工作错误6

时间:2017-10-24 11:04:51

标签: c cgi

我的c程序输出有问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* valueOfParam (char *param) {
//some code but in this case result is null
    return NULL;
}

int main () {
//....
char *vm_title = valueOfParam("title"); 
unsigned int vm_vc; 
if (valueOfParam("vc"))
vm_vc = atoi(valueOfParam("vc"));           
unsigned int vm_dc; 
if (valueOfParam("dc"))
vm_dc  = atoi(valueOfParam("dc"));
unsigned int vm_cl; 
if (valueOfParam("cl"))
vm_cl = atoi(valueOfParam("cl"));
unsigned int vm_pl; 
if (valueOfParam("pl"))
vm_pl = atoi(valueOfParam("pl"));
//.....
printf("vm_title=%s \n<br>", vm_title);
printf("vm_vc=%d \n<br>", vm_vc);
printf("vm_dc=%d \n<br>", vm_dc);
printf("vm_cl=%d \n<br>", vm_cl);
//.....
}

当我尝试打印12值时,一切都很好,如果我打印2或更多字符串值我崩溃了

segfault, error 6 in /var/log/messages.

我做错了什么?

P.S。问题不在于此代码片段,抱歉。

unsigned int vm_users;                              
if (valueOfParam("users")){
    printf("==%s", vm_users);
    //vm_users  = atoi(valueOfParam("users"));
}

特别是在线(如果取消注释则崩溃)

vm_users  = atoi(valueOfParam("users"));

2 个答案:

答案 0 :(得分:0)

printf("vm_title=%s \n<br>", vm_title);取消引用NULL指针,你得到了SEGFAULT,这并不奇怪,但预期。

下一个

vm_users = atoi(valueOfParam("users"));在atoi函数中取消引用NULL指针

unsigned int vm_users;                              
if (valueOfParam("users")){
    printf("==%s", vm_users);
    //vm_users  = atoi(valueOfParam("users"));
}

这里你取消引用未初始化的unsigned int变量指针 - 另一个UB。

BT在10行代码中有如此多的UB。我的建议 - 首先阅读C书,然后编写代码。

答案 1 :(得分:0)

很抱歉给您带来不便。

问题证明是不确定的变量。我只需要给它们分配一个零,问题就解决了。 我很惊讶没有明确指定任何一个变量可能会在处理其他变量时使程序崩溃。

我会在一段时间后删除此问题,因为它不正确。