我想在第45行的文件service.cpp上的gdb中设置一个断点,我这样做:
gdb> break service.cpp:45
Run Code Online (Sandbox Code Playgroud)
问题是我的应用程序中有许多service.cpp文件,它没有选择我感兴趣的文件.如何指定正确的service.cpp文件?
当我通过SSH运行某些程序时,例如firefox &,我收到错误
Error: no display specified
Run Code Online (Sandbox Code Playgroud)
我想打开很多显示器,仍然显示stdout每个程序.
初步问题:如何指定显示以获得多个显示的程序?
Pablo Santa Cruz给出了以下代码作为解决方案.我不明白.
$ export DISPLAY=yourmachine.yourdomain.com:0.0
$ firefox &
Run Code Online (Sandbox Code Playgroud)
什么是yourmachine与yourdomain.com在命令?
我遇到了一个基类,它的析构函数是非虚拟的,尽管基类有1个虚函数fv().该基类也有许多子类.其中许多子类定义了它自己的子类fv().
我不知道程序中如何使用基类和子类的细节.我只知道程序工作正常,即使基类的析构函数应该是虚拟的.
我想将基类的析构函数从非虚拟更改为虚拟.但我不确定后果.那么,会发生什么?在更改程序后,我还需要做些什么来确保程序正常工作?
跟进:在我将基类的析构函数从非虚拟更改为虚拟后,程序失败了一个测试用例.
结果让我很困惑.因为如果基类的析构函数不是虚拟的,那么程序将不会使用基类的多态.因为如果没有,它会导致未定义的行为.例如,Base *pb = new Sub.
所以,我认为如果我将析构函数从非虚拟更改为虚拟,它不应该导致更多的错误.
我通过source命令调用脚本,并希望将参数传递给脚本.
我检查过man source,bash返回:
:[参数]
没有效果; 除扩展参数和执行任何指定的重定向之外,该命令不执行任何操作.返回零退出代码.source filename [arguments]
从当前shell环境中的filename读取并执行命令,并返回从filename执行的最后一个命令的退出状态.如果filename不包含斜杠,则使用PATH中的文件名来查找包含filename的目录.在PATH中搜索的文件不需要是可执行的.当bash不处于posix模式时,如果在PATH中找不到文件,则搜索当前目录.如果关闭shopt内置命令的sourcepath选项,则不搜索PATH.如果提供了任何参数,则在执行文件名时它们将成为位置参数.否则,位置参数不变.返回状态是脚本中退出的最后一个命令的状态(如果没有执行命令,则为0),如果未找到或无法读取文件名,则返回false.
它没有例子,所以我不明白.
有如下代码:
int fun(){
char* pc = NULL;
{
char ac[100] = "addjfidsfsfds";
pc = ac;
}
...
pc[0] = 'd';
printf("%s\n", pc);
...
}
Run Code Online (Sandbox Code Playgroud)
那么,我可以pc在ac结束范围之后安全使用吗?因为我不确定分配的堆栈内存是否ac会被编译器重新分配用于其他用途.
我刚写了这些代码:
int x = -1;//x must be negative
unsigned int y = 1;//y must be positive
bool b;
for(; ; x--, y++){
b = ((unsigned int)x) * y == ((unsigned int)(x * y));
}
Run Code Online (Sandbox Code Playgroud)
然后我发现这b总是如此.在我看来,((unsigned int)x)*y会溢出,但((unsigned int)(x*y))不会.我真的很难相信这是真的.这只是巧合还是这种现象背后有任何法律?
这是源文件get.c的内容:
#include <stdio.h>
int main(){
//int i = 0;
char b[10];
gets(b);
puts(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我用这些命令编译它时
Run Code Online (Sandbox Code Playgroud)gcc -o get get.c -Wall -Werror
输出是
Run Code Online (Sandbox Code Playgroud)/tmp/ccYEWZvx.o: In function `main': get.c:(.text+0x10): warning: the `gets' function is dangerous and should not be used.
但是当改变代码时
#include <stdio.h>
int main(){
int i = 0; // **this line just be uncommented**
char b[10];
gets(b);
puts(b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用相同的命令,输出是
Run Code Online (Sandbox Code Playgroud)cc1: warnings being treated as errors get.c: In function 'main': get.c:4: error: unused variable 'i'
那么,为什么这个未使用的变量警告被视为错误,而使用gets() …
我正在阅读"算法导论",作者多次提到"严密的代码"."紧"是否仅意味着与另一个算法相比,实现一种算法的代码较少?
在书中,作者说插入排序和快速排序都有"严密的代码",这使得算法更快.例如,尽管快速排序的时间复杂度相同,但快速排序通常比排序更快.
当然,我不认为"紧密代码"意味着在没有正确格式化,额外空格,空行的情况下编写代码.
我在RedHat中使用gdb来调试C++代码.为了更好地调试我的代码,我补充道printf("XXX").
但是,执行后printf("XXX"),gdb控制台没有显示XXX.
我的代码的其他部分工作正常.
该程序包含如下代码:
int size;
...
int *pi = (int*)calloc(size, sizeof(int));
...
Run Code Online (Sandbox Code Playgroud)
这是用gcc7.2编译时的错误信息?
错误:参数 1 范围 [18446744071562067968, 18446744073709551615] 超过最大对象大小 9223372036854775807 [-Werror=alloc-size-larger-than=]
当我
int *pi = (int*)calloc(size, sizeof(int)); 改为
int *pi = (int*)calloc((unsigned int)size, sizeof(int));
错误消失了。
但是,在程序中,有很多malloc和calloc我原来的版本一样使用。
为什么gcc只检测到一个错误?
c ×3
c++ ×3
gdb ×2
algorithm ×1
ambiguity ×1
bash ×1
breakpoints ×1
calloc ×1
debugging ×1
destructor ×1
gcc ×1
gcc7 ×1
linux ×1
performance ×1
pointers ×1
printf ×1
stack-memory ×1
virtual ×1
x11 ×1