0

次のコードがありました:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>

int main()
{
    char a = 'A';
    unsigned int b = 1000;
    char* arr = (char*)malloc(sizeof(a));
    memcpy(arr, &a, sizeof(a));
    arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
    memcpy(arr + sizeof(a), &b, sizeof(b));

    const char* pData = arr;
    assert(*pData == a);
    pData += sizeof(a);
    assert(*(unsigned int*)pData == b);
    printf("finished\n");
}

このコードは、x86 の前身であるシステムでは問題なく動作しますが、Blackfin デバイスでは失敗します。Blackfin デバイスでエラーが発生しました。エラーメッセージの最初の行は次のとおりです。

データ アクセスの不整列アドレス違反

Blackfin プロセッサは、データをワード サイズにアラインメントしないと動作しないと読みました。次に、次のコードを試しました:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <memory>
#include <string.h>

int main()
{
    char a[] = "AAA";
    unsigned int b = 1000;
    char* arr = (char*)malloc(sizeof(a));
    memcpy(arr, &a, sizeof(a));
    arr = (char*)realloc(arr, sizeof(arr) + sizeof(b));
    memcpy(arr + sizeof(a), &b, sizeof(b));

    const char* pData = arr + sizeof(a);
    assert(*(unsigned int*)pData == b);
    printf("finished\n");
}

このコードは、x86 および Blackfin ハードウェアで動作します。ここで質問があります:コードから手動でデータを整列させる方法はありますか?

清聴ありがとうございました!

4

0 に答える 0