小编Jab*_*cky的帖子

windows fopen 随机失败,权限被拒绝

我正在尝试读取和写入计算机 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 windows winapi fopen permission-denied

6
推荐指数
0
解决办法
1892
查看次数

处理/防止非 UWP Win32 应用程序在 Windows 10 中挂起

我有一个用 C++ 编写的旧版 Win32 应用程序,它在系统上持续运行以监控系统健康相关参数。最近,我开始面临应用程序在 Windows 10 上每 2-3 天暂停并变得无响应的问题。经过一番研究,我了解到最近的 Windows 10 版本中引入的一项新功能,该功能会主动查找未被主动使用的进程并挂起这些进程以节省 CPU 和 RAM 等系统资源。虽然我遇到了几篇文章(参考链接之一是这个) 在该状态下,Windows 10 有大约 5-10 秒的等待时间,之后如果用户不主动使用它,它会将进程移至挂起状态。现在,我的应用程序每 30 秒向远程服务器发送一条 UDP 消息,向服务器表明该应用程序正在机器上运行。以下是我的问题:

  1. 有没有办法防止应用程序被挂起,或者有办法将此超时增加到一个相对较大的值,以便应用程序保持活动状态?
  2. 还有其他非基于 UI 的应用程序也在我的系统上运行,它们相对不太活跃,但它们永远不会被挂起,这是否仅适用于基于 UI 的应用程序?
  3. 虽然有一些像这样的引用在您的应用程序中添加特殊处理以捕获来自 Windows 的挂起消息并在您的应用程序中保存必要的状态,但所有这些引用都是基于 C# 的。有人可以指出我对 C++ 的类似参考吗?
  4. 有什么方法可以跟踪 Windows 以某些事件日志或 Windows 日志的形式暂停应用程序的时间和原因?

附加信息:我尝试使用资源监视器和进程资源管理器手动暂停/恢复应用程序,因为应用程序不会立即暂停以了解行为,但没有运气。我有一种感觉,他应该在应用程序本身中处理,因为当前没有处理应用程序变得无响应。

由于我被困在这里几天,因此非常感谢任何帮助。

提前致谢!

c++ windows win32gui windows-10-desktop

6
推荐指数
0
解决办法
1274
查看次数

纠正字符串数组C的free()

这可能是一个新手的错误,但我很想知道我究竟做错了什么.

代码:

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,我仍然看到堆中有内存泄漏 - 我该如何解决这个问题?我怀疑我的太空间太大了 - 但是,我怎么去解放我不一定使用的空间呢?

感谢任何提示!

c string malloc free

5
推荐指数
2
解决办法
1575
查看次数

sendfile64只复制约2GB

我需要使用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)

c c++ linux sendfile

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

Firefox远程调试Windows 8上的"意外错误"

我需要在Firefox中为"Android"调试一个Web应用程序.我正在尝试将设备连接到桌面Firefox,但始终收到错误"意外错误".

我执行了https://developer.mozilla.org/en-US/docs/Tools/Remote_Debugging/Firefox_for_Android的所有步骤

  1. 我安装了Android SDK工具和平台,并使用adb命令正确检测到设备.

  2. 我在桌面Firefox和Firefox for Android上启用了远程调试

  3. 我在设备上启用了远程USB调试.

  4. 设备连接到我的PC的原始电缆.

  5. 我在命令行上运行命令adb forward tcp:6000 tcp:6000没有问题.

  6. 最后,在开发人员桌面Firefox菜单中,我选择了connect选项.页面似乎连接到localhost:6000,并单击"连接"按钮,出现错误"意外错误".

有任何想法吗?

debugging firefox android adb

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

C11中const限定符的性能优势

"const"限定符的优点已在各种问题中进行了讨论,但这些讨论主要涉及针对无意修改和意图清晰度的失败.我想问一下,由于使用了限定符,结果程序是否有任何差异 - 特别是,是否有性能提升?

在其他一个问题中,有人指出,如果在C++中存在'const_cast'的情况下传递给具有const限定符的函数,则编译器不能使用不改变的对象的自然假设.那不是在C11中,那么const是否允许在C11中进行任何优化而没有它?

性能差异的另一种可能性是静态对象的内存布局.在只读空间中拥有对象有任何性能优势吗?这可能取决于硬件,我会对特定配置的一般见解和注释感兴趣.

编辑:这是一个非常广泛的要求,要求一个普遍的论点,断言不能有必要使用'const'的性能增益.然而,否定这一主张可能是一个相当简洁的回应.所以,更具体一点,并且不排除任何解决我的一般问题的内容,特别有用的答案形式如下:

  1. 任何以必要方式使用'const'实现性能增益的情况的示例.

  2. 关于为什么编译器由于使用'const'而无法进行优化的任何争论.这可能不是特定于硬件的,因此如果是这种情况,可能会简明扼要地给出.如果需要更具体,我最感兴趣的是在函数调用中使用'const'.

  3. 关于只读内存是否可以与静态对象一起使用以在x86-64的桌面或服务器实现中实现性能增益的任何答案.

话虽如此,我将理解最初提出的问题的最一般答案是合理的.

c performance const c11

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

如何修复"变量先前声明'静态'重新声明'extern'错误"?

当我尝试:

#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)

c static extern linkage

5
推荐指数
0
解决办法
109
查看次数

在给定数字N之后将列更改为行

我需要在给定数字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)

c

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

如何从 C / 汇编中的内存地址执行函数?

我有以下汇编函数(已用 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) 错误

c linux x86 assembly disassembly

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

如何处理 WinAPI 宏覆盖某些函数名称的情况?

<windows.h>为 WinAPI 的 Ansi 和 Unicode 版本定义宏。SendMessage我的类库中有一个名为的函数。它工作正常,直到<windows.h>在包含我的库之前包含在内。在这种情况下SendMessage,被宏覆盖,函数名称变为SendMessageASendMessageW

是否可以在不更改函数名称的情况下以某种方式处理它,以保存与旧版本库的兼容性?

c c++ windows macros winapi

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