[英]C language: How to use memset to reset dynamic 2d array?
大家!
我知道calloc
可以在堆上為動態2d數組分配內存,並將內存初始化為'\\ 0'。 但是,在使用動態數組之后,我想再次將其重置為零。 我寫的源代碼如下:
首先,我將宏定義如下:
#define MAX_NR_VERTICES 5000
#define MAX_NR_VERTICESdiv8 625
#define REPORTERROR(file_name, line_num, message) \
printf("[%s--%d] %s\n", file_name, line_num, message)
#define CALLOC(arg, type, num, file_name, line_num, message) \
if ((arg = (type *)calloc(num, sizeof(type))) == NULL) { \
REPORTERROR(file_name, line_num, message); \
exit(EXIT_FAILURE); \
}
#define FREE(arg) \
free(arg)
然后,我定義了動態數組,並如下使用它:
...
char **graph = NULL;
CALLOC(graph, char *, MAX_NR_VERTICES, __FILE__, __LINE__, "cannot allocate memory for char **graph in _tmain function.\n");
for (int i = 0; i < MAX_NR_VERTICES; i++) {
CALLOC(graph[i], char, MAX_NR_VERTICESdiv8, __FILE__, __LINE__, "cannot allocate memory for char (*g) [] in _tmain function.\n");
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
graph[i][j] = 0x80;
printf("%d ", graph[i][j]);
}
printf("\n");
}
...
到目前為止,一切都運轉良好。 然后,我想將動態2d數組再次重置為零:
memset(graph, 0, MAX_NR_VERTICES * MAX_NR_VERTICESdiv8 * sizeof(char));
發生錯誤。 錯誤信息是:
Unhandled exception at 0x0FDA3FD4 (msvcr120d.dll) in 0xC0000005: Access violation writing location 0x0074F000.
如果我想重置動態2d數組,程序中的錯誤是什么?如何在此處正確使用memset?
我使用Visual Studio 2013(C ++)終極版。
非常感謝你!
看來您已經假設為graph
元素分配的所有內存都是連續的。 這不是一個有效的假設。 您需要分別重置graph
的每個元素的內容:
for(i = 0 ; i < MAX_NR_VERTICES; i++)
memset(graph[i], 0, sizeof(char) * MAX_NR_VERTICESdiv8);
祝你好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.