Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我试图创建一些动态分配的字节流,并在其他地方执行它们的副本。我的代码是这样的(以前我没有从pc上键入:)):
我这样称呼它:
现在,我的程序有时会运行,有时会崩溃。
我暂时被困在这里,我真的可以使用一些帮助。
编译器:msvc
谢谢
只是看错了。我认为应该
因为您似乎打算分配一个指向
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我试图创建一些动态分配的字节流,并在其他地方执行它们的副本。我的代码是这样的(以前我没有从pc上键入:)):
void construct_cypherstreams(uint8_t * stream, int key_length, int stream_length, uint8_t ** encr_streams, int * bytes_in_stream) {
// chyperstream = the stream formed of every ith byte
uint8_t * cypherstream;
int length;
length = stream_length / key_length + 1;
// each byte of the key can have values
// between 0 and 256
int i = 0;
int num_added = 0;
for (int k = 0; k < key_length; k++) {
printf("\n%s %d\n", "iteration", k);
i = k; num_added = 0;
cypherstream = (uint8_t *)malloc(length * sizeof (char));
if (cypherstream == NULL) {
printf("%s\n", "could not allocate");
exit(1);
}
else {
printf("%s\n", "succesfully allocated");
}
while (i < stream_length) {
// construct cypherstream
cypherstream[num_added] = stream[i];
num_added++;
i += key_length;
}
printf("\n%s\n", "created cypherstream:");
for (int m = 0; m < num_added; m++) {
printf("%X", cypherstream[m]);
}
printf("\n");
printf("%s\n", "making deep copy...");
encr_streams[k] = (uint8_t *)malloc(num_added * sizeof(char));
// perform deep copy of characters
for (int n = 0; n < num_added; n++) {
encr_streams[k][n] = cypherstream[n];
}
printf("%s\n", "done making deep copy");
free(cypherstream);
printf("%s\n", "succesfully freed");
printf("%s %d\n", "position:", k);
printf("%s %d\n", "num_added:", num_added);
bytes_in_stream[k] = num_added;
printf("%s\n", "iteration ended");
}
}
我这样称呼它:
uint8_t ** encr_streams;
int * bytes_in_stream;
encr_streams = (uint8_t **)malloc(key_length * sizeof **encr_streams);
bytes_in_stream = (int *)malloc(key_length * sizeof *bytes_in_stream);
construct_cypherstreams(stream, key_length, stream_length, encr_streams, bytes_in_stream);
现在,我的程序有时会运行,有时会崩溃。
我暂时被困在这里,我真的可以使用一些帮助。
编译器:msvc
谢谢
最佳答案
encr_streams = (uint8_t **)malloc(key_length * sizeof **encr_streams);
只是看错了。我认为应该
encr_streams = malloc(key_length * sizeof *encr_streams);
因为您似乎打算分配一个指向
uint8_t
的指针数组。然后,您可能还必须通过某种方式初始化该数组的元素。09-29 21:28