小编fuz*_*fuz的帖子

用C/C++澄清悬空指针

关于在C/C++中悬空指针,我有点困惑

void remove(){
Node* curr = new Node(10);
Node* pt = curr;
delete curr;

// do something here
// do other thing here
}
Run Code Online (Sandbox Code Playgroud)

我假设Node* pt在函数remove()终止之前仍然悬空指针?

终止Node* pt后我不必担心指针remove()

c++ dangling-pointer

0
推荐指数
2
解决办法
1001
查看次数

处理器如何处理未初始化的变量?

所以我有一个分配,我基本上必须在汇编中弄清楚变量是如何存储的,而且我在弄清楚 C++ 如何处理各种变量时遇到了问题。

MyClass var;
MyClass *p = new MyClass();
var.setX(3)
Run Code Online (Sandbox Code Playgroud)

我想我发现的是: *p 引用被存储在堆栈上,而创建的对象被分配在堆上。这意味着 p 正在引用创建的对象。请确认是否正确。

问题是var会发生什么,它是动态分配的吗?我正在查看程序集,但找不到任何可以指向我答案的内容。

c++ assembly

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

有人可以帮我理解一些汇编语言吗?

很抱歉,这不是正确的地方,但我正在拼命想了解这个程序集脚本中发生的事情(我假设它就是这样,基于我已经完成的谷歌搜索时间。)它是Pokemon Yellow 版本的 rom,我了解一些但不是全部。我想如果我能得到一些帮助来理解这一段在做什么,我就能弄清楚其余的部分。代码如下所示:

PalletTownScript:
    CheckEvent EVENT_GOT_POKEBALLS_FROM_OAK
    jr z, .next
    SetEvent EVENT_PALLET_AFTER_GETTING_POKEBALLS
.next
    call EnableAutoTextBoxDrawing
    ld hl, PalletTownScriptPointers
    ld a, [wPalletTownCurScript]
    jp JumpTable
Run Code Online (Sandbox Code Playgroud)

我的理解是第一行只是将它的其余部分放入一个名为“PalletTownScript”的标签中,只是一个稍后引用的名称。第二行检查某个事件是否发生,在另一个文件中有详细说明。到目前为止一切都很好。第三行对我来说变得复杂了。我确定“jr”跳转到脚本的另一部分,然后返回这里?我认为?但是,据我所知,每个例子只有一个参数,而这一行有两个。是跳到z吗?z是什么?我已经搜索了该文件的其余部分,但没有名为 z 的部分。z 是另一个函数吗?另一个参数是 .next,据我所知,它是 PalletTownScript 部分的一个子部分。所以它在那里跳跃是有道理的(但为什么要跳跃?如果它' 就在那里,难道它不就这样做了吗?)但我仍然不知道“z”在那里做什么。在 .next 中,它正在调用一些东西并加载一些其他东西,这一切都很好,但最后,它跳转到另一个文件中的 JumpTable(我假设在它全部编译后无关紧要,所以我我不关心那个),但它是否仍然跳转到 .next,然后再次跳转到 JumpTable?什么时候回去做那个SetEvent?之后它去哪里了?我不关心那个),但它是否仍然跳转到 .next,然后再次跳转到 JumpTable?什么时候回去做那个SetEvent?之后它去哪里了?我不关心那个),但它是否仍然跳转到 .next,然后再次跳转到 JumpTable?什么时候回去做那个SetEvent?之后它去哪里了?

我以前从未处理过 Assembly,这对我来说都非常混乱,所以如果有人能给我一些帮助,我将不胜感激。谢谢!

assembly gameboy

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

如何编译使用不推荐使用的功能(例如gets())的C程序

对于家庭作业,我必须尝试使用​​缓冲区溢出来使简单的c程序崩溃。我的问题是我的编译器不会编译该gets()函数,因为它已被弃用且不安全。我理解这一点,但是为了举例说明,我想重写它。这是代码:

#include <stdio.h>

int main(int argc, char *argv[]) {

    int valid = 0;

    // Char arrays w/buffer set to 8 chars
    char str1[8];
    char str2[8];

    next_tag(str1);

    //This is where I want to use gets and not fgets or other secure functions...
    gets(str2);

    if(strncmp(str1, str2, 8) == 0) {
        valid = 1;
    }

    // Print
    printf("Buffer 1: str1(%s), str2(%s), valid(%d)\n", str1, str2, valid);


}
Run Code Online (Sandbox Code Playgroud)

我的gcc版本是:

rabbitfighter @ ECHO:[〜/代码/ C / BufferOverflowExamples]:gcc -v

使用内置规格。
COLLECT_GCC = gcc
COLLECT_LTO_WRAPPER = / …

c linux gcc

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

shrl -0x1if(4(%rsp) - 我理解左移,但目前不了解-0x1if ...汇编指令的一部分?

我现在还在学习装配.其余的代码在我理解之下并且宁愿自己解决,但涉及右移(shrl)的行是我不明白的.0x1if(4(%rsp)是什么意思?谢谢!

 400783:    89 7c 24 ec             mov    %edi,-0x14(%rsp)
 400787:    c7 44 24 fc 00 00 00    movl   $0x0,-0x4(%rsp)
 40078e:    00 
 40078f:    eb 14                   jmp    4007a5 <f3+0x22>
 400791:    8b 44 24 ec             mov    -0x14(%rsp),%eax
 400795:    83 e0 01                and    $0x1,%eax
 400798:    85 c0                   test   %eax,%eax
 40079a:    74 05                   je     4007a1 <f3+0x1e>
 40079c:    83 44 24 fc 01          addl   $0x1,-0x4(%rsp)
 **4007a1:  d1 6c 24 ec             shrl   -0x1if (4(%rsp)***
 4007a5:    83 7c 24 ec 00          cmpl   $0x0,-0x14(%rsp)
 4007aa:    75 e5                   jne    400791 <f3+0xe> …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64

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

C程序来计算注释行(//和/**/)

我需要一个程序来计算.txt或.c文件的行,并返回以下内容:

文件:
简单注释:N行
多行注释:N行
总行数:N行

我有这个:

if (pFile != NULL) 
{
    do { 
    c = fgetc(pFile);

    if (c == '\n') n++;

    } while (c != EOF);
Run Code Online (Sandbox Code Playgroud)

我不知道如何实现其余部分.
我也尝试使用strstr()函数,但也没有得到它.

c comments file count line

-2
推荐指数
1
解决办法
1万
查看次数

int变量的值应为45,打印为2358648

这个答案是怎么来的

#include<stdio.h>
#include<conio.h> 
int main() {
    int i, sum;
    for (i = 0, sum = 0; i < 10; i++)
        sum += i;
    printf("%d", & sum);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

2358648
Run Code Online (Sandbox Code Playgroud)

c

-2
推荐指数
1
解决办法
60
查看次数

是什么导致错误?

我是C++的新手.这是我的程序,总结两个3x3矩阵,我只是不知道如何退出while循环,似乎我只能退出for循环.请帮忙.这是我的代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>

int main() {
    double a[3][3];
    double b[3][3];
    char str[40];
    int step = 1;
    double resultan;
    while (1) {
        for(int i=1; i<=3; i++) {
            for(int j=1; j<=3; j++) {
                if (step==1) {
                    printf("Enter value of matrix a row %d column %d = ", i, j);
                    scanf("%lf", &a[i][j]);
                }
                if (step==2) {
                    printf("Enter value of matrix b row %d column %d = ", i, j);
                    scanf("%lf", &b[i][j]);
                }
                if (step==3) {
                    resultan = …
Run Code Online (Sandbox Code Playgroud)

c++

-4
推荐指数
1
解决办法
58
查看次数

c ++循环的增量

好吧,我从来没有尝试过for循环.我想将for循环增加8而不是一般的后增量.我正在尝试这样的事情.

for(U8 i=3;i<=31;i+8,j++){
    Array[j]=(Status>>i) ;

    if (j>3){
        j = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧它给了我警告,就像逗号表达式的左手操作数没有效果.这个警告是什么意思?我的逻辑会起作用吗?status包含我系统的32位信息,我需要特殊的位.

c++ for-loop

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

在函数中同时返回两个值

如何在C编程语言中的一个函数中同时返回两个整数类型值,还是应该编写两个不同的函数?

c function return-value multiple-return-values

-8
推荐指数
1
解决办法
2703
查看次数