小编use*_*721的帖子

如何调试'Stack smashing detected'?

我有一个复杂的c ++代码.

这是一个使用http://althenia.net/fcgicc的FastCGI程序

当我问它一个looooong url时,我得到了

*** stack smashing detected ***: ./tileserve terminated
Erreur de segmentation
Run Code Online (Sandbox Code Playgroud)

对于现实生活,这不是问题,因为我从来没有使用这么长的网址,但这意味着任何人都可以终止我的服务器......我不喜欢这样.

是否有工具(以及如何使用它?)来找出问题出现在哪里?

编辑:已解决

好的解决了.

我在做

int len;
char uri[200];

len = strlen(request.params[std::string("REQUEST_URI")].c_str());
printf("%d\n", len);

if (len > 200) return 1;

strcpy(uri, request.params[std::string("REQUEST_URI")].c_str());
Run Code Online (Sandbox Code Playgroud)

对于len测试看起来200太高了.它实际上在194失败了.

所以我做了 :

if (len > 190) return 1;
Run Code Online (Sandbox Code Playgroud)

现在,没关系.

c++ stack-smash

17
推荐指数
1
解决办法
5万
查看次数

为什么javascript ln被称为日志?

我只是花了几个小时试图实现一些物理计算.

然后,我发现一切都是错的,只是因为Math.log不是关于log10而是ln.

我期待Math.ln() = lnMath.log() = log10.但绝对不是Math.log() = ln!!!

为什么他们这么混乱?

javascript math

16
推荐指数
2
解决办法
5756
查看次数

如何将 JKS 证书用于 NODE https 客户端请求

我想在 NodeJS 应用程序中使用来自 JKS 密钥库的证书。

var fs = require('fs'); 
var https = require('https'); 

var options = { 
  hostname: 'XXX.com', 
  port: 4443, 
  path: '/endpoint', 
  method: 'GET', 
  key: fs.readFileSync('private.pem'), 
  cert: fs.readFileSync('public.pem'), 
};


var req = https.request(options, function(res) { 
  res.on('data', function(data) { 
    process.stdout.write(data); 
  }); 
}); 

req.end(); 

req.on('error', function(e) { 
  console.error(e); 
});
Run Code Online (Sandbox Code Playgroud)

如何将 JKS 转换为 PEM?谢谢

https jks pem x509certificate node.js

6
推荐指数
1
解决办法
5972
查看次数

使用ssd和mmap改进并发文件读取

我有巨大的气象文件.太大了适合公羊.

我需要执行大量并发随机读取.所以,我认为SSD + mmap可以提高性能.

但是什么是并发mmap读取?他们应该如何组织?

在此输入图像描述

concurrency performance mmap solid-state-drive

5
推荐指数
1
解决办法
1055
查看次数

c ++ char数组:a [i] = b [i]失败

我有一些麻烦试图将char复制到char ...

这是args []的定义:

char* args[6];
if (1 == ParseQuery(request, &args[0])) ....

#note : args[ARG_DATE] = "201204090600"
Run Code Online (Sandbox Code Playgroud)

这是定义:

struct date {
  char a[4];
  char m[2];
  char j[2];
  char h[4];
};

date d;
Run Code Online (Sandbox Code Playgroud)

这就是我想要做的:

int TileServe::ParseQuery(FastCGIRequest& request, char** args) {

for (int i=0; i<4; i++) {
  d.a[i] = args[ARG_DATE][i];
  d.h[i] = args[ARG_DATE][i+8];
}
for (int i=0; i<2; i++) {
  d.m[i] = args[ARG_DATE][i+4];
  d.j[i] = args[ARG_DATE][i+6];
}

strcat(filename, "/");
strcat(filename, d.a);
strcat(filename, "/");
strcat(filename, d.m);
...
printf("%s\n", filename);
Run Code Online (Sandbox Code Playgroud)

我明白了:

./data/alpes/201204090600/04090600/090600/0600/alpes_201204090600.nc
Run Code Online (Sandbox Code Playgroud)

我期待着 : …

c++ char

1
推荐指数
1
解决办法
163
查看次数