【问题标题】:ARM7 Raspberry pi Assembly Segmentation fault after copying string [duplicate]复制字符串后的ARM7 Raspberry pi程序集分段错误[重复]
【发布时间】:2020-03-01 03:27:08
【问题描述】:

这是我的 ARM7 程序集 sn-p

.global strCopy
.text
strCopy:

strCopyloop:    
    LDRB R2, [R1], #1
    STRB R2, [R0], #1

    CMP R2, #0
    BNE strCopyloop

    Bx LR

这是使用这个函数的 C 文件

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

extern void strCopy(char* strTo, const char* strFrom);
int main(){

        const char* str1 ="This one";
        char* str2;


        strCopy(str2,str1);


        return 0;
}

我一生都无法弄清楚为什么它给了我一个分段错误。

【问题讨论】:

  • 你还没有为str2分配空间。
  • 它会以与普通strcpy 相同的方式崩溃。使用调试器查看您正在向 asm 传递一个错误指针(无论是在未初始化的 str2 本地变量中的什么)。

标签: c assembly segmentation-fault arm7


【解决方案1】:

你需要为str2创造空间

这可以使用 malloc 函数来完成。

str2= char* malloc(strlen(str1)+1)

您在字符串末尾添加 1 表示空字符。这显示了字符串的结尾。您现在可以继续使用 strcpy 函数对 2 个字符串进行 Scipy。

【讨论】:

  • 在使用指针时为数据数据创建空间总是很重要的。这对于所有类型的指针都是必需的,而不仅仅是字符串。尤其是在处理复杂结构时。如果我们明确不知道特定数据类型的大小,我们通常使用函数 sizeof。
  • 如果您不只是测试strcpy 实现:在使用strlen 获取长度后,您可以使用memcpy,它比strcpy 更有效。
猜你喜欢
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多