我正在尝试读取和写入计算机 C 驱动器中的文件。该fopen()功能随机失败。
FILE *fp = fopen(strIn, "r");
if(fp == NULL){
printf("Error: %d (%s)\n", errno, strerror(errno));
getchar();
}
Run Code Online (Sandbox Code Playgroud)
这个调用有时会成功,有时会失败。无法预测原因。我总是在管理模式下运行它。这是否可能是Windows问题?它得到的错误消息是 error -13 , permission denied。我试过打电话
_chmod(outFile , _S_IREAD);
Run Code Online (Sandbox Code Playgroud)
并检查返回值,然后调用fopen()。又失败fopen()了。
我有一个用 C++ 编写的旧版 Win32 应用程序,它在系统上持续运行以监控系统健康相关参数。最近,我开始面临应用程序在 Windows 10 上每 2-3 天暂停并变得无响应的问题。经过一番研究,我了解到最近的 Windows 10 版本中引入的一项新功能,该功能会主动查找未被主动使用的进程并挂起这些进程以节省 CPU 和 RAM 等系统资源。虽然我遇到了几篇文章(参考链接之一是这个) 在该状态下,Windows 10 有大约 5-10 秒的等待时间,之后如果用户不主动使用它,它会将进程移至挂起状态。现在,我的应用程序每 30 秒向远程服务器发送一条 UDP 消息,向服务器表明该应用程序正在机器上运行。以下是我的问题:
附加信息:我尝试使用资源监视器和进程资源管理器手动暂停/恢复应用程序,因为应用程序不会立即暂停以了解行为,但没有运气。我有一种感觉,他应该在应用程序本身中处理,因为当前没有处理应用程序变得无响应。
由于我被困在这里几天,因此非常感谢任何帮助。
提前致谢!
这可能是一个新手的错误,但我很想知道我究竟做错了什么.
代码:
int main()
{
int i =0;
char ** nameslist;
nameslist = malloc(5 * sizeof(char*));
for (i=0; i <5; i++)
{
nameslist[i]=malloc((20+1)*sizeof(char));
}
nameslist[0]="John";
nameslist[1]="Adam";
nameslist[2]="Nick";
nameslist[3]="Joe";
nameslist[4]="Peter";
for (i=0; i <5; i++)
{
free(nameslist[i]);
}
free(nameslist);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用Valgrind,我仍然看到堆中有内存泄漏 - 我该如何解决这个问题?我怀疑我的太空间太大了 - 但是,我怎么去解放我不一定使用的空间呢?
感谢任何提示!
我需要使用sendfile64来复制大约16GB的文件.到目前为止我取得的成就是
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <sys/sendfile.h>
#include <sys/stat.h>
int main (int argc, char** argv)
{
long long src;
long long dest;
struct stat64 stat_buf;
off64_t offset = 0LL;
long long rc;
if (argc != 3) {
fprintf(stderr, "usage: %s <source> <destination>\n", argv[0]);
exit(1);
}
src = open64(argv[1], O_RDONLY);
if (src == -1) {
fprintf(stderr, "unable to open '%s': %s\n", argv[1], strerror(errno));
exit(1);
}
fstat64(src, &stat_buf);
dest = open64(argv[2], O_WRONLY|O_CREAT, stat_buf.st_mode);
if …Run Code Online (Sandbox Code Playgroud) 我需要在Firefox中为"Android"调试一个Web应用程序.我正在尝试将设备连接到桌面Firefox,但始终收到错误"意外错误".
我执行了https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Firefox_for_Android的所有步骤
我安装了Android SDK工具和平台,并使用adb命令正确检测到设备.
我在桌面Firefox和Firefox for Android上启用了远程调试
我在设备上启用了远程USB调试.
设备连接到我的PC的原始电缆.
我在命令行上运行命令adb forward tcp:6000 tcp:6000没有问题.
最后,在开发人员桌面Firefox菜单中,我选择了connect选项.页面似乎连接到localhost:6000,并单击"连接"按钮,出现错误"意外错误".
有任何想法吗?
"const"限定符的优点已在各种问题中进行了讨论,但这些讨论主要涉及针对无意修改和意图清晰度的失败.我想问一下,由于使用了限定符,结果程序是否有任何差异 - 特别是,是否有性能提升?
在其他一个问题中,有人指出,如果在C++中存在'const_cast'的情况下传递给具有const限定符的函数,则编译器不能使用不改变的对象的自然假设.那不是在C11中,那么const是否允许在C11中进行任何优化而没有它?
性能差异的另一种可能性是静态对象的内存布局.在只读空间中拥有对象有任何性能优势吗?这可能取决于硬件,我会对特定配置的一般见解和注释感兴趣.
编辑:这是一个非常广泛的要求,要求一个普遍的论点,断言不能有必要使用'const'的性能增益.然而,否定这一主张可能是一个相当简洁的回应.所以,更具体一点,并且不排除任何解决我的一般问题的内容,特别有用的答案形式如下:
任何以必要方式使用'const'实现性能增益的情况的示例.
关于为什么编译器由于使用'const'而无法进行优化的任何争论.这可能不是特定于硬件的,因此如果是这种情况,可能会简明扼要地给出.如果需要更具体,我最感兴趣的是在函数调用中使用'const'.
关于只读内存是否可以与静态对象一起使用以在x86-64的桌面或服务器实现中实现性能增益的任何答案.
话虽如此,我将理解最初提出的问题的最一般答案是合理的.
当我尝试:
#include <stdio.h>
static int c1 = 10;
int main(){
{
extern int c1; //c1 here still has internal linkage
printf("%d",c1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
什么都不会出错.但是当我尝试修改它时有点像这样:
#include <stdio.h>
static int c1 = 10;
int main(){
int c1 = 20; //This is where I modified.
c1++;
{
extern int c1;
printf("%d",c1);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
突然间,出现了一个错误.它说"变量先前声明'静态'重新声明'extern'".为什么?
逐字错误消息:
prog.c: In function ‘main’:
prog.c:11:20: error: variable previously declared ‘static’ redeclared ‘extern’
extern int c1;
Run Code Online (Sandbox Code Playgroud) 我需要在给定数字N之后将矩阵列更改为行.例如,如果N = 3,则在本练习中给出行n*2.现在在第3列之后,每隔一列需要一行.我知道如何转置矩阵,但是在给定N之后,我感到很困惑.
#include <stdio.h>
int main() {
int n;
int a[n][n * 2];
int b[n * 2][n];
scanf("%d", &n);
for(int i = 0;i < n; i++) {
for(int j = 0; j < n * 2; j++) {
scanf("%d", a[i][j]);
}
}
for(int i = 0; i < n * 2; i++) {
for(int j = 0; j < n; j++) {
a[i][j] = b[j][i];
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
n = 3的示例.
1 2 3 4 5 6 …Run Code Online (Sandbox Code Playgroud) 我有以下汇编函数(已用 objdump 显示)
0000000000000000 <add>:
0: b8 06 00 00 00 mov $0x6,%eax
5: c3 retq
Run Code Online (Sandbox Code Playgroud)
现在在 CI 中做了以下代码:
#include <stdio.h>
typedef int (*funcp) (int x);
unsigned char foo[] = {0xb8,0x06,0x00,0x00,0x00,0xc3};
int main(void)
{
int i;
funcp f = (funcp)foo;
i = (*f);
printf("exit = %d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在全局变量 foo 中,我在汇编中输入了我的函数的内存地址并尝试执行它,但它没有按预期返回 6。如何为它们的内存地址执行函数?此外,我可以在哪里研究更多关于该主题的信息?
obs:有时我会遇到 Segmentation fault (core dumped) 错误
<windows.h>为 WinAPI 的 Ansi 和 Unicode 版本定义宏。SendMessage我的类库中有一个名为的函数。它工作正常,直到<windows.h>在包含我的库之前包含在内。在这种情况下SendMessage,被宏覆盖,函数名称变为SendMessageA或SendMessageW。
是否可以在不更改函数名称的情况下以某种方式处理它,以保存与旧版本库的兼容性?