rosu alin
rosu alin

Reputation: 5830

How to make a copy of a byte array in c code?

I have the address of the first char in my byte array, and it's size: const char *rawImageBytes, int size

And I want to copy the content to a different byte array. and then modify that one a bit. This is whay I am doing now:

LOGI("FrameReceived will reach here 1");
modifiedRawImageBytes = rawImageBytes;
jint sizeWH = width * height;
jint quarter = sizeWH/4;
jint v0 = sizeWH + quarter;
for (int u = sizeWH, v = v0, o = sizeWH; u < v0; u++, v++, o += 2) {
        modifiedRawImageBytes[o] = rawImageBytes[v]; // For NV21, V first
        modifiedRawImageBytes[o + 1] = rawImageBytes[u]; // For NV21, U second
}

But I don't get the correct colours, as if I would to this in Java, instead of c++. And I am assuming this happens, because I just do modifiedRawImageBytes = rawImageBytes; instead of actually copying the whole byte array, so that it can start in memory from another address pointer. A bit of a beginner with c, so I'm lost at this, can someone help me understand what is done wrong? PS: I am assuming that, because even if I send the rawImageBytes and not the modifiedRawImageBytes, it will still be modified

Upvotes: 1

Views: 9097

Answers (1)

Brighter side
Brighter side

Reputation: 402

This is because const char * is a pointer. This mean it represent an address. So you guessed right, the new variable represent the same datas.

To avoid this you should create a copy.

char modifiedRawImageBytes[size];
//if the pointer come from function's param don't redeclare it ;)
std::memcpy(modifiedRawImageBytes, rawImageBytes, size*sizeof(char));

This code will allocate a new char array and then memcpy will copy in the previous array data in the new array.

Note that you need to includecstdio

Upvotes: 3

Related Questions