#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_FILES 10
#define MAX_PATH_LENGTH 100
// 函数声明
void addPath(char *paths[MAX_FILES], const char *path, int *count);
void printPaths(char *paths[MAX_FILES], int count);
int main() {
char *paths[MAX_FILES] = {NULL};
int count = 0;
addPath(paths, "/home/user/file1.txt", &count);
addPath(paths, "/var/log/syslog", &count);
addPath(paths, "/etc/passwd", &count);
printPaths(paths, count);
// 释放内存
for (int i = 0; i < count; i++) {
free(paths[i]);
}
return 0;
}
void addPath(char *paths[MAX_FILES], const char *path, int *count) {
if (*count >= MAX_FILES) {
printf("无法添加更多路径,已达到最大限制。\n");
return;
}
paths[*count] = (char *)malloc(strlen(path) + 1);
if (paths[*count] == NULL) {
printf("内存分配失败。\n");
return;
}
strcpy(paths[*count], path);
(*count)++;
}
void printPaths(char *paths[MAX_FILES], int count) {
for (int i = 0; i < count; i++) {
printf("路径 %d: %s\n", i + 1, paths[i]);
}
}
处理路径长度不同的情况
- 固定长度数组:定义一个足够大的固定长度数组(如
MAX_PATH_LENGTH
)来存储路径。这种方法简单,但可能浪费内存,特别是当大部分路径较短时。
- 动态内存分配:使用
malloc
根据实际路径长度分配内存,如代码中的addPath
函数。这样可以有效利用内存,但需要注意内存管理,避免内存泄漏。
可能出现的内存问题
- 内存泄漏:如果在分配内存后(如
malloc
),没有相应的free
操作,就会导致内存泄漏。在上述代码中,main
函数结尾处释放了每个路径分配的内存。
- 悬空指针:当释放了一块内存,但指针没有置为
NULL
时,就可能出现悬空指针。如果后续不小心使用了这个悬空指针,可能导致未定义行为。在释放内存后,应将指针置为NULL
,以避免这种情况。
- 内存分配失败:
malloc
可能因为系统内存不足而失败,如代码中addPath
函数里检查malloc
返回值,若失败则给出提示。